| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1482 人关注过本帖
标题:关于一道题的解法和我解法的错误之处
取消只看楼主 加入收藏
zkkpal
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-7-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
关于一道题的解法和我解法的错误之处
一家公司会计准备给5个工人发工资,但她并没有数总共的钱数时有事出去了。要得到工资的这几个人分别是A,B,C,D,E。A首先看到了那些钱,于是他把那些钱平均分成5份,但多了1元,A想,1元叫他们分太麻烦了,于是A拿走了1/5和一元;A走之后,B又看到了那些剩下的钱,于是和A想的一样,B把剩下的钱分了1/5,也多出一元,于是拿走了剩下的1/5和一元。C,D,E同样。最后等会计回来的时候剩下的钱刚好能平均分成五份。问最初最少会有多少钱。

请大家给出你们的解法。

下面这个是我的思路:
#include<stdio.h>
#include<stdlib.h>
main()
{
    float x=1,n;
    int y;

      while(y%5!=0)
      {
                  
        for(n=1;n<=5;n++)
        {
         x=(x/0.8)+1;
         }
   
       y=x;
 
       x++;
       }
    printf(%d,y)
     system("pause");
}

由于float不能=int
所以有错误
谁知道如何修改

[ 本帖最后由 zkkpal 于 2009-8-19 22:04 编辑 ]
搜索更多相关主题的帖子: 循环 
2009-08-19 22:02
zkkpal
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-7-26
收藏
得分:0 
恩,你的解法得数的确正确,你用强制转换解决的这个问题,可是为什么我用强制转换就会出问题呢。
#include<stdlib.h>
#include<stdio.h>
main()
{
    int x,y,z,n;


      for(x=1;x<=100000;x++)
      {
                  
        for(n=1;n<=5;n++)
        {
         x=(int)((float)x/0.8)+1;
        y=x;
           if(y%5==1)
            {
                      z++;
            }
         }
        
       if(z==5) break;

 
       }
    printf("%d\n",x);
 system("pause");
}
还有另一个也有问题
#include<stdlib.h>
#include<stdio.h>
main()
{
       int i,x,a;
       a=5;
       while (a>0)
        {  for (i=1;i<=5;i++)
             {
             x=(5*a+4)/4;
             a=x;
             if (x%5!=1) break;
             }
            if(x%5==1) break;
            else
               {
               a=a+5;
               
               }
        }
   printf("%d",x);
   system("pause");
}
你能给解释一下,这两个出的问题么

[ 本帖最后由 zkkpal 于 2009-8-20 13:21 编辑 ]
2009-08-20 12:09
zkkpal
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-7-26
收藏
得分:0 
楼上的算法是错误的
2009-08-20 13:23
zkkpal
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-7-26
收藏
得分:0 
x=(int)((float)x/0.8)+1;
我这个算法的意思是,x是最后的钱,往上加
你程序的 y=(int)(((float)x/4)*5+1);
这个不和我的意思一样么
2009-08-21 10:47
zkkpal
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-7-26
收藏
得分:0 
貌似改完了之后还是有问题,麻烦指点
#include<stdlib.h>
#include<stdio.h>
main()
{
    int x,y,s,m,n;

      for(s=1;s<=100000;s++)
      {
        m=0;           
         for(n=1;n<=5;n++)
          {
         
            x=(int)((float)x/0.8)+1;
            y=x;
            
              if(y%5==1)
                {
                      m++;
                }
           }
        
       if(m==5) break;
 
       }
    printf("%d\n",x);
 system("pause");
}

得出结果看起来应该是越界了
2009-08-21 20:03
zkkpal
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-7-26
收藏
得分:0 
如果答案是15625,在分的第一次就出错了
3121绝对是准确答案,你自己演算下
2009-08-22 09:51
zkkpal
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-7-26
收藏
得分:0 
你不要忘记了每次分5份完还会多一元,每人还会拿走那一元
2009-08-22 11:57
zkkpal
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-7-26
收藏
得分:0 
回复22楼的,你的算法是对的,但你答案是错误的。
3121你自己验算,绝对是正确答案
按你的算法也可以验证,但你的15625就算按你算法
15625+4=15629
15629/5绝对得整数
你不要光讨论理论,自己算一下就知道你错了
2009-08-26 20:31
zkkpal
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-7-26
收藏
得分:0 
按你的算法
3121+4)*(0.8^5)-4=1020(中间的加减4可以消掉)
1020/5=204 没有余数
而15625
15625+4)*(0.8^5)-4 得出的数是有小数位的。
2009-08-26 20:52
快速回复:关于一道题的解法和我解法的错误之处
数据加载中...
 
   



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

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