搜索
查看: 1940|回复: 12
打印 上一主题 下一主题

发题求教

[复制链接]
跳转到指定楼层
楼主
发表于 2013-7-3 10:33:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
本帖最后由 kzys 于 2013-7-3 10:37 编辑

500个人喝水需要500瓶       3个空瓶能换一瓶水       那么最少要买多少瓶水才够500人喝?
用C语言来编

最佳答案

查看完整内容

让计算机来做不难的解是334 334 + 111 + 37 + 12 + 4 + 2 刚好500
沙发
发表于 2013-7-3 10:33:43 | 只看该作者
让计算机来做不难的
  1. #include <stdio.h>
  2. int main()
  3. {
  4.    int empty = 0, sum = 0, current = 375;
  5.    for(;; --current){
  6.                    sum = 0;
  7.                    empty = current;
  8.                    sum += current;
  9.                    while(empty > 2){
  10.                            int bottle = empty/3;
  11.                            sum += bottle;
  12.                            empty = bottle + empty%3;

  13.                    }
  14.                   
  15.                    if(sum < 500)
  16.                            break;
  17.    }

  18.    printf("%d\n", current+1);

  19.    return 0;
  20. }
复制代码
解是334
334 + 111 + 37 + 12 + 4 + 2 刚好500
板凳
发表于 2013-7-3 19:14:05 | 只看该作者
#include<stdio.h>
int main()
{int a;
a=500*3/4;
printf("%d\n",a);
return 0;
}             我试了,可以的喔
地板
发表于 2013-7-3 19:26:21 | 只看该作者
#include<stdio.h>
int main()
{int a,n,b;
printf("输入喝水的人数:");
scanf("%d",&n);
a=n*3;b=a/4;
if(a%4==0)
printf("%d\n",b);
else
printf("%d\n",b+1);
return 0;
}
5#
发表于 2013-7-3 19:32:55 | 只看该作者
925892860 发表于 2013-7-3 19:14
#include
int main()
{int a;

375明显不正确吧
6#
发表于 2013-7-3 23:50:27 | 只看该作者
这不就是 买3送1么

买X瓶送 X/3瓶

X+X/3 >=500 => X=375瓶
7#
发表于 2013-7-3 23:51:56 | 只看该作者
Anleb 发表于 2013-7-3 23:50
这不就是 买3送1么

买X瓶送 X/3瓶

不是,剩下的瓶子还可以去换水,所以用不到375瓶
8#
发表于 2013-7-4 00:02:50 | 只看该作者
rosynirvana 发表于 2013-7-3 23:51
不是,剩下的瓶子还可以去换水,所以用不到375瓶

总共需要500瓶水
第一次 买3瓶  500-3
留下了4个空瓶

第二次:3个空瓶 换1瓶水,此时 有 空瓶1个,换取水 1瓶,还需要再买一瓶
留下了3个空瓶:

第三次: 再换一瓶,还需要买2瓶,依次。。。

3+1+2XN=500

即:248瓶
9#
发表于 2013-7-4 00:05:58 | 只看该作者
不好意思,版主,我网络卡,多发了几次
10#
发表于 2013-7-4 00:31:54 | 只看该作者
Anleb 发表于 2013-7-4 00:02
总共需要500瓶水
第一次 买3瓶  500-3
留下了4个空瓶

248瓶不够的,你可以自己手动实验下
11#
发表于 2013-7-4 00:35:08 | 只看该作者
rosynirvana 发表于 2013-7-4 00:31
248瓶不够的,你可以自己手动实验下

忘记了。。。248+3+1才是 答案=252瓶。。。忘记加上去了。。哈哈
12#
发表于 2013-7-4 00:47:04 | 只看该作者
Anleb 发表于 2013-7-4 00:35
忘记了。。。248+3+1才是 答案=252瓶。。。忘记加上去了。。哈哈

算法就不对
买252瓶水,最终是 252+84+28+9+3+1瓶
这问题凭感觉就不会有那么简洁的close form吧

13#
发表于 2013-7-4 13:38:00 | 只看该作者
我也做出来了,不过不知道为什么会多1,所以减去了。
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.         int num,bottle,exchang,rest,last,flag;
  6.     for(num=1;num<500;num++)
  7.     {
  8.     for(flag=0,bottle=num,exchang=bottle/3,rest=bottle%3;exchang/3!=0;)
  9.         {
  10.     last=exchang;
  11.     bottle+=exchang;
  12.     exchang=(exchang+rest)/3;
  13.     rest=(last+rest)%3;
  14.     if(exchang==0)
  15.     bottle=bottle+rest;
  16.     if(bottle>=500)
  17.     {flag=1;break;}
  18.     }
  19.     if(flag==1)
  20.     break;
  21.     }
  22.     printf("%d\n",num-1);
  23.         system("pause");
  24.         return 0;
  25. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表