A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 294645832 中级黑马   /  2014-5-26 10:19  /  3506 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 294645832 于 2014-6-5 15:24 编辑

6. (for 循环) 百钱买鸡”是我国古代的著名数学题。题目这样描述: 3 文 钱可以买 1只公鸡, 2 文钱可以买一只母鸡 1 文钱可以买 文钱可以买 3 只小鸡。用 只小鸡。用 100 文 钱买 100 只鸡,那么各有公鸡母鸡小鸡多少只?

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1 赞一个!

查看全部评分

8 个回复

正序浏览
武xiao 中级黑马 2014-12-14 15:20:25
9#
对于5*x+3*y+(100-x-y)/3==100,这个不懂的童鞋大家可以看下面的图

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

IMG_1125.JPG
回复 使用道具 举报
wyy666 中级黑马 2014-5-26 16:55:33
8#
      题目有点不清楚啊,原题应该是:一百个铜钱买了一百只鸡,其中公鸡一只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));
                                                      }
                                          }
}
}

}
回复 使用道具 举报
wyy666 中级黑马 2014-5-26 16:43:59
7#
题目有点不清楚啊,原题应该是:一百个铜钱买了一百只鸡,其中公鸡一只5钱、母鸡一只3钱,小鸡一钱3只,问一百只鸡中公鸡、母鸡、小鸡各多少
回复 使用道具 举报
附耳细说 发表于 2014-5-26 15:48
遍历的时候当公鸡 母鸡 小鸡的价格总和操作100文的时 后面就可以不再遍历了
  例如当公鸡a= 20的时候    ...

加入
if(a*3 + b*2 + c/3 > 100)
                                  break;
这句判断后
程序效率提高了一倍
回复 使用道具 举报
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.            }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黑妞~ + 1

查看全部评分

回复 使用道具 举报 1 0
本帖最后由 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的倍数

评分

参与人数 1技术分 +1 收起 理由
黑妞~ + 1

查看全部评分

回复 使用道具 举报
这个设三个变量然后循环就可以吧



评分

参与人数 1技术分 +1 收起 理由
黑妞~ + 1

查看全部评分

回复 使用道具 举报
顶一个~~~~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马