| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 621 人关注过本帖
标题:问一问题,看看思路对不对
只看楼主 加入收藏
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
结帖率:79.37%
收藏
已结贴  问题点数:5 回复次数:7 
问一问题,看看思路对不对
酒鬼们聚在一桌酒席上,要比一比酒量。先上一瓶各人平分,喝完再说。这酒厉害,一瓶喝下来,当场就倒了几个。于是再来一瓶,在剩下的人中平分,结果又有人倒下。现在能坚持的人已经很少,又来一瓶,还是平分。这下总算有了结果——全倒下了。只听见最后倒下的酒鬼中有人嘟囔:“嗨,我正好喝了一瓶。”虽然这家伙醉倒了,但这句话还是符合实际情况的。请问一共有几个酒鬼。

我来分析:“嗨,我正好喝了一瓶。“说明第三瓶不是一个人喝,也不是三个人喝,(因为只有3瓶酒)那么只有2个人喝。这2个人总喝2瓶,还有1瓶是前两次喝。后倒下的两个人两次每个人喝½瓶。也就是1/6+1/3=½瓶.所以一共有6个酒鬼.的一次每人喝1/6瓶,第二次喝1/3瓶,第三次喝1/2瓶。大概有六个左右,但是若用C怎么写出?
搜索更多相关主题的帖子: 思路 
2010-06-22 09:01
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
可以穷举。(不知道4个人算不算?)

★★★★★为人民服务★★★★★
2010-06-22 12:49
yl_524
Rank: 2
等 级:论坛游民
帖 子:35
专家分:43
注 册:2010-3-17
收藏
得分:0 
#includ<stdio.h>
main()
{  double x,n,m,flag=0; //已知共喝了3瓶酒。设有x个酒鬼。喝下第一瓶酒后醉倒n人。喝第二瓶酒后醉倒m人。
   for(x=4;flag==0;x++) //n<x, m<x, n+m<x, 1/x+1/(x-n)+1/x-n-m)=1, 4个式子联立不等式组得x>3,
                         //所以在这x初值定为4
       for(n=1;n<x;n++)
           for(m=1;m<x;m++)
              if((n+m<x)&&(1/x+1/(x-n)+1/x-n-m)==1))//以最nb的----喝了一瓶的哥们儿的酒量建立等式
              { printf("%f",x);
                flag=1;
               }
}
运行结果为6  。如果把 变量flag去掉,把第一个for循环的循环条件改成一个x的一个大值,结果还是6。
2010-06-23 15:36
yl_524
Rank: 2
等 级:论坛游民
帖 子:35
专家分:43
注 册:2010-3-17
收藏
得分:0 
由于大括号太占行数,所以几个for循环的大括号都省略了,请勿见怪
2010-06-23 15:41
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
回复 3楼 yl_524
好像是无限循环呢:
#include<stdio.h>
void main()
{  double x,n,m,flag=0; //已知共喝了3瓶酒。设有x个酒鬼。喝下第一瓶酒后醉倒n人。喝第二瓶酒后醉倒m人。
   for(x=4;flag==0;x++) //n<x, m<x, n+m<x, 1/x+1/(x-n)+1/x-n-m)=1, 4个式子联立不等式组得x>3,
                         //所以在这x初值定为4
       for(n=1;n<x;n++)
           for(m=1;m<x;m++)
              if((n+m<x)&&(1/x+1/(x-n)+1/x-n-m)==1)//以最nb的----喝了一瓶的哥们儿的酒量建立等式
              { printf("%f",x);
                flag=1;
               }
}
红色句是不是错误的?

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-06-23 16:49
yl_524
Rank: 2
等 级:论坛游民
帖 子:35
专家分:43
注 册:2010-3-17
收藏
得分:0 
1,没见红色句子。
2,可以通过编译和运行,X的值为6,没有发现错误。
3,第一个for循环的flag==0就是判断循环是否结束的,最里层for循环下执行的语句是输出符合条件的X值并且改变flag的值。
2010-06-24 13:20
yl_524
Rank: 2
等 级:论坛游民
帖 子:35
专家分:43
注 册:2010-3-17
收藏
得分:0 
或者这样写,把第一层循环换成while循环语句,这样你会看得更清楚些。
#includ<stdio.h>
main()
{  double x,n,m,flag=0; //已知共喝了3瓶酒。设有x个酒鬼。喝下第一瓶酒后醉倒n人。喝第二瓶酒后醉倒m人。
   while(flag==0) //n<x, m<x, n+m<x, 1/x+1/(x-n)+1/x-n-m)=1, 4个式子联立不等式组得x>3,
   { x=4;                      //所以在这x初值定为4
       for(n=1;n<x;n++)
           for(m=1;m<x;m++)
              if((n+m<x)&&(1/x+1/(x-n)+1/x-n-m)==1))//以最nb的----喝了一瓶的哥们儿的酒量建立等式
              { printf("%f",x);
                flag=1;
               }
      x++;
    }
}
2010-06-24 13:24
yl_524
Rank: 2
等 级:论坛游民
帖 子:35
专家分:43
注 册:2010-3-17
收藏
得分:5 
也或者直接while(1)。用break语句来结束循环。
#includ<stdio.h>
main()
{  double x,n,m; //已知共喝了3瓶酒。设有x个酒鬼。喝下第一瓶酒后醉倒n人。喝第二瓶酒后醉倒m人。
   while(1) //n<x, m<x, n+m<x, 1/x+1/(x-n)+1/x-n-m)=1, 4个式子联立不等式组得x>3,
   {   x=4;                      //所以在这x初值定为4
       for(n=1;n<x;n++)
           for(m=1;m<x;m++)
              if((n+m<x)&&(1/x+1/(x-n)+1/x-n-m)==1))//以最nb的----喝了一瓶的哥们儿的酒量建立等式
              { printf("%f",x);
                break;               
              }
        x++;
    }
}


[ 本帖最后由 yl_524 于 2010-6-24 13:28 编辑 ]
2010-06-24 13:26
快速回复:问一问题,看看思路对不对
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017277 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved