黑马程序员技术交流社区

标题: 关于java的一个测试 [打印本页]

作者: 王涵    时间: 2013-9-27 13:40
标题: 关于java的一个测试
百鸡百钱问题,公鸡每只3元,母鸡每只5元,小鸡每3只1元,用100元钱买100只鸡,公鸡、母鸡、小鸡应各买多少?
/*class Work {
        public static void main(String[] args) {
               
        for (int x=0,y=0,z=0;x < 100,y < 100,z < 100 ;x++,y++,z++ ) {
                if (x*3 + y*5 + z/3  == 100 & x+y+z == 100) {
                        System.out.println(x);
                        System.out.println(y);
                        System.out.println(z);
                }
        }
        }
}*/
这个该怎么做啊?谁能给个思路


作者: jìng╮煜    时间: 2013-9-27 13:57
class Work {
        public static void main(String[] args) {
               
        for (int x=0;x<30;x++ )
       for(int y=0;y<15;y++)
     for(int z=0;z<80;z+=3)
{
                if (x*3 + y*5 + z/3  == 100 & x+y+z == 100) {
                        System.out.println(x);
                        System.out.println(y);
                        System.out.println(z);
                }
        }
        }
}
作者: 冯晓骏    时间: 2013-9-27 14:03
本帖最后由 冯晓骏 于 2013-9-28 20:24 编辑
  1. class Test10
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 for(int x = 0 ; x <= 100 ; x ++)
  6.                 {
  7.                         for(int y = 0 ; y <= 100 ; y ++)
  8.                         {
  9.                                 for(int z = 0 ; z <= 100 ; z ++)
  10.                                 {
  11.                                         //这里前两个条件不用多说,最后一个条件我觉得要加上
  12.                                         //因为公鸡和母鸡都整数的钱,小鸡必须满足是3个倍数才能达到100元
  13.                                         //如果不这样,z/3的操作会将类型提升,忽略了z不是3整数倍的情况
  14.                                         if(3*x+5*y+z/3 == 100 & x+y+z == 100 & z%3 == 0)
  15.                                                 System.out.println("公鸡:"+x+"母鸡:"+y+"小鸡:"+z);
  16.                                 }
  17.                         }
  18.                 }
  19.         }
  20. }
复制代码

作者: FFF    时间: 2013-9-27 14:11
  1.         class Temp {
  2.         public static void main(String[] args)
  3.         {
  4.                 int s=1;
  5.         for(int x=0;x < 100;x++) {
  6.                 for(int y=0;y<100;y++){
  7.                         for(int z=0;z<100;z++)
  8.                         {
  9.                                 if (x*3 + y*5 + z/3  == 100 & x+y+z == 100){
  10.                         System.out.print(x+",");
  11.                         System.out.print(y+",");
  12.                         System.out.print(z);
  13.                        System.out.println("第"+s+"种");
  14.                        s++;
  15.                        }
  16.                                
  17.                         }
  18.                        
  19.                 }

  20.         }
  21.         }
  22. }
复制代码
运行的结果是
4,12,84第1种
6,11,83第2种
11,8,81第3种
13,7,80第4种
18,4,78第5种
20,3,77第6种
25,0,75第7种
作者: doitforyou    时间: 2013-9-27 15:05
  1. class BuyChicken
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int count = buyChicken();
  6.                 System.out.println("使用100元买100只鸡共有"+count+"种买法");
  7.         }
  8.         /*
  9.         打印要买的鸡的数目并返回多少种买法:
  10.         cock为公鸡5元1只,hen为母鸡3元1只,biddy为小鸡1元3只
  11.         */
  12.         public static int buyChicken()
  13.         {       
  14.                 int count = 0;
  15.                 for(int cock=0; cock<=100/5; cock++)
  16.                 {
  17.                         for(int hen=0; (hen*3+5*cock)<=100; hen++)
  18.                         {
  19.                                 int biddy = 100-cock-hen;
  20.                                 if(biddy%3==0&&(cock*5+hen*3+biddy/3)==100)
  21.                                 {
  22.                                         System.out.println("cock="+cock+"  hen="+hen+"  biddy"+biddy);
  23.                                         count++;
  24.                                 }               
  25.                         }
  26.                 }
  27.                 return count;
  28.         }
  29. }
复制代码
打印结果为:
cock=0  hen=25  biddy75
cock=4  hen=18  biddy78
cock=8  hen=11  biddy81
cock=12  hen=4  biddy84
使用100元买100只鸡共有4种买法


作者: wumuzhong    时间: 2013-9-27 17:37
比较简单是思路是三层for循环遍历执行,每个变量执行当其他变量最小值还符合的最大次数。
  1. package thread;

  2. class Test {
  3.         public static void main(String[] args) {
  4.                 int s = 1;
  5.                 for (int x = 0; x < 32; x++) {//若y,z皆为1时,最大执行次数为(100-5-1)/3
  6.                         for (int y = 0; y < 20; y++) {//若x,z皆为1时,最大执行次数为(100-3-1)/5
  7.                                 for (int z = 0; z < 92; z++) {//若x,y皆为1时,最大执行次数为(100-3-5)/1
  8.                                         if (x * 3 + y * 5 + z / 3 == 100 && x + y + z == 100) {//当满足两种情况时,既符合购买
  9.                                                 System.out.print("第" + s + "种符合情况--->");
  10.                                                 System.out.print("x=" + x + ",");
  11.                                                 System.out.print("y=" + y + ",");
  12.                                                 System.out.print("z=" + z);
  13.                                                 System.out.println();
  14.                                                 s++;
  15.                                         }

  16.                                 }

  17.                         }

  18.                 }
  19.         }
  20. }
复制代码
输出结果:
第1种符合情况--->x=4,y=12,z=84
第2种符合情况--->x=6,y=11,z=83
第3种符合情况--->x=11,y=8,z=81
第4种符合情况--->x=13,y=7,z=80
第5种符合情况--->x=18,y=4,z=78
第6种符合情况--->x=20,y=3,z=77
第7种符合情况--->x=25,y=0,z=75
作者: 深情小建    时间: 2013-9-28 18:56
本帖最后由 深情小建 于 2013-9-28 21:32 编辑

发现好多人的运行结果为7种,我觉得正确答案是4种。【然后发现版主不管正误给每个人都加了技术分,这个我有些不是很理解】

楼主的问题错在x,y,z每次都同步递增了,就是说每次都x=y=z,这是不正确的,然后if语句的只考虑到了两个条件,其实应该要三个条件

条件1、x*3 + y*5 + z/3  == 100        总价为100元
条件2、x+y+z == 100                        总数为100只
条件3、z%3 == 0                                小鸡的数量必须是3的整数倍才行

附上我的代码:
  1. public class Work {
  2.         public static void main(String[] args) {
  3.                 int i=1;
  4.                 for(int x=0;x<100;x++)
  5.                 {
  6.                         for(int y=0;y<100;y++)
  7.                         {
  8.                                 for(int z=0;z<100;z++)
  9.                                 {
  10.                                         if (x*3 + y*5 + z/3  == 100 && x+y+z == 100 && z%3==0) {
  11.                                                 System.out.println("方案"+i+":公鸡"+x+"\t母鸡"+y+"\t小鸡"+z);
  12.                                                 i++;
  13.                                         }
  14.                                 }
  15.                         }
  16.                 }
  17.         }
  18. }
复制代码
运行结果:
方案1:公鸡4        母鸡12        小鸡84
方案2:公鸡11        母鸡8        小鸡81
方案3:公鸡18        母鸡4        小鸡78
方案4:公鸡25        母鸡0        小鸡75



作者: 冯晓骏    时间: 2013-9-28 20:27
本帖最后由 冯晓骏 于 2013-9-28 20:28 编辑
深情小建 发表于 2013-9-28 18:56
发现好多人的运行结果为7种,我觉得正确答案是4种。【然后发现版主不管正误给每个人都加了技术分,这个我有 ...

哥们,首先,你打印的x和y写反了,其次,没有了。。

作者: 深情小建    时间: 2013-9-28 21:31
冯晓骏 发表于 2013-9-28 20:27
哥们,首先,你打印的x和y写反了,其次,没有了。。

嗯 好的  灰常感谢  哥们儿看的真仔细  赞一个{:soso_e179:}

作者: xiaoxu    时间: 2013-9-28 21:50
x*3 + y*5 + z/3  == 100
x+y+z == 100两个表达式相消,得出
4x+7y=100;这样就减少了循环的次数;以下是我的代码
  1. public class Work {
  2.         public static void main(String[] args) {
  3.                 int k=1;
  4.                 for(int i=0;i<14;i++){
  5.                         for(int j=0;j<=25;j++){
  6.                                 if(7*i+4*j==100){
  7.                                         System.out.println("第"+(k++)+"种:"+"公鸡:"+j+" 母鸡:"+i+" 小鸡:"+(100-i-j));
  8.                                 }
  9.                         }
  10.                 }
  11.         }
  12. }
复制代码
运行的结果:
第1种:公鸡:25 母鸡:0 小鸡:75
第2种:公鸡:18 母鸡:4 小鸡:78
第3种:公鸡:11 母鸡:8 小鸡:81
第4种:公鸡:4 母鸡:12 小鸡:84

作者: 猥琐_、大叔    时间: 2013-9-29 02:05
深情小建 发表于 2013-9-28 18:56
发现好多人的运行结果为7种,我觉得正确答案是4种。【然后发现版主不管正误给每个人都加了技术分,这个我有 ...

哥们写的真详细。真用心。





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