黑马程序员技术交流社区

标题: 发现一个挺有意思得题,求解答 [打印本页]

作者: 294645832    时间: 2014-5-26 10:19
标题: 发现一个挺有意思得题,求解答
本帖最后由 294645832 于 2014-6-5 15:24 编辑

6. (for 循环) 百钱买鸡”是我国古代的著名数学题。题目这样描述: 3 文 钱可以买 1只公鸡, 2 文钱可以买一只母鸡 1 文钱可以买 文钱可以买 3 只小鸡。用 只小鸡。用 100 文 钱买 100 只鸡,那么各有公鸡母鸡小鸡多少只?
作者: 294645832    时间: 2014-5-26 11:18
顶一个~~~~~
作者: 万彪    时间: 2014-5-26 11:38
这个设三个变量然后循环就可以吧




作者: 294645832    时间: 2014-5-26 12:24
本帖最后由 294645832 于 2014-5-26 12:25 编辑
万彪 发表于 2014-5-26 11:38
这个设三个变量然后循环就可以吧
  1.         public static void main(String[] args) {
  2.                 for(int a = 0; a<=33; a++){//最多33只公鸡
  3.                         for(int b = 0; b<=50; b++){//最多50只母鸡
  4.                                 int c = 100 - a - b; //c只小鸡
  5.                                 if(c % 3 != 0) continue; //c必须是3的倍数
  6.                                 if ( a*3 + b*2 + c/3 == 100){         
  7.                                     System.out.println(a + "只公鸡," + b + "只母鸡," + c + "只小鸡");
  8.                                 }
  9.                         }
  10.                 }
  11.         }
复制代码


我也做出来  感觉你的应该再加上一步 z%3 !=0 continue   吧   保证是3的倍数
作者: 附耳细说    时间: 2014-5-26 15:48
294645832 发表于 2014-5-26 12:24
我也做出来  感觉你的应该再加上一步 z%3 !=0 continue   吧   保证是3的倍数 ...

遍历的时候当公鸡 母鸡 小鸡的价格总和操作100文的时 后面就可以不再遍历了
  例如当公鸡a= 20的时候   母鸡b肯定<=20  20*3(公鸡的价格总和)+20*2(母鸡的价格总和)+小鸡的价格总和 >=100,这个时候循环就可以终止了,但是循环条件里面是for(int b = 0; b<=50; b++),所以对于20<b<=50这个取值区间没有必要在进行遍历了。
  1.   for(int a = 0; a<=33; a++){//最多33只公鸡
  2.                   for(int b = 0; b<=50; b++){//最多50只母鸡
  3.                           int c = 100 - a - b; //c只小鸡
  4.                           if((a*3 + b*2 + c/3 == 100) && c%3 == 0 ){   
  5.                               System.out.println(a + "只公鸡," + b + "只母鸡," + c + "只小鸡");
  6.                           }
  7.                           if(a*3 + b*2 + c/3 > 100)
  8.                                   break;
  9.                   }
  10.            }
复制代码

作者: 附耳细说    时间: 2014-5-26 15:49
附耳细说 发表于 2014-5-26 15:48
遍历的时候当公鸡 母鸡 小鸡的价格总和操作100文的时 后面就可以不再遍历了
  例如当公鸡a= 20的时候    ...

加入
if(a*3 + b*2 + c/3 > 100)
                                  break;
这句判断后
程序效率提高了一倍
作者: wyy666    时间: 2014-5-26 16:43
题目有点不清楚啊,原题应该是:一百个铜钱买了一百只鸡,其中公鸡一只5钱、母鸡一只3钱,小鸡一钱3只,问一百只鸡中公鸡、母鸡、小鸡各多少
作者: wyy666    时间: 2014-5-26 16:55
      题目有点不清楚啊,原题应该是:一百个铜钱买了一百只鸡,其中公鸡一只5钱、母鸡一只3钱,小鸡一钱3只,问一百只鸡中公鸡、母鸡、小鸡各多少?
        分析:设一百只鸡中公鸡、母鸡分别为x,y,则小鸡为(100-x-y),根据5*x+3*y+(100-x-y)/3==100,进行判断,利用for循环可实现。
class Demo{
public static void main(String args[]){
for(int x=1;x<=20;x++){

   for(int y=1;y<=33;y++){
      if(5*x+3*y+(100-x-y)/3==100){
            System.out.println("公鸡数="+x);
            System.out.println("母鸡数="+y);
            System.out.println("小鸡数="+(100-x-y));
                                                      }
                                          }
}
}

}

作者: 武xiao    时间: 2014-12-14 15:20
对于5*x+3*y+(100-x-y)/3==100,这个不懂的童鞋大家可以看下面的图

IMG_1125.JPG (55.6 KB, 下载次数: 76)

IMG_1125.JPG





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2