黑马程序员技术交流社区
标题: 关于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 编辑
- class Test10
- {
- public static void main(String[] args)
- {
- for(int x = 0 ; x <= 100 ; x ++)
- {
- for(int y = 0 ; y <= 100 ; y ++)
- {
- for(int z = 0 ; z <= 100 ; z ++)
- {
- //这里前两个条件不用多说,最后一个条件我觉得要加上
- //因为公鸡和母鸡都整数的钱,小鸡必须满足是3个倍数才能达到100元
- //如果不这样,z/3的操作会将类型提升,忽略了z不是3整数倍的情况
- if(3*x+5*y+z/3 == 100 & x+y+z == 100 & z%3 == 0)
- System.out.println("公鸡:"+x+"母鸡:"+y+"小鸡:"+z);
- }
- }
- }
- }
- }
复制代码
作者: FFF 时间: 2013-9-27 14:11
- class Temp {
- public static void main(String[] args)
- {
- int s=1;
- for(int x=0;x < 100;x++) {
- for(int y=0;y<100;y++){
- for(int z=0;z<100;z++)
- {
- if (x*3 + y*5 + z/3 == 100 & x+y+z == 100){
- System.out.print(x+",");
- System.out.print(y+",");
- System.out.print(z);
- System.out.println("第"+s+"种");
- s++;
- }
-
- }
-
- }
- }
- }
- }
复制代码 运行的结果是
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
- class BuyChicken
- {
- public static void main(String[] args)
- {
- int count = buyChicken();
- System.out.println("使用100元买100只鸡共有"+count+"种买法");
- }
- /*
- 打印要买的鸡的数目并返回多少种买法:
- cock为公鸡5元1只,hen为母鸡3元1只,biddy为小鸡1元3只
- */
- public static int buyChicken()
- {
- int count = 0;
- for(int cock=0; cock<=100/5; cock++)
- {
- for(int hen=0; (hen*3+5*cock)<=100; hen++)
- {
- int biddy = 100-cock-hen;
- if(biddy%3==0&&(cock*5+hen*3+biddy/3)==100)
- {
- System.out.println("cock="+cock+" hen="+hen+" biddy"+biddy);
- count++;
- }
- }
- }
- return count;
- }
- }
复制代码 打印结果为:
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循环遍历执行,每个变量执行当其他变量最小值还符合的最大次数。- package thread;
- class Test {
- public static void main(String[] args) {
- int s = 1;
- for (int x = 0; x < 32; x++) {//若y,z皆为1时,最大执行次数为(100-5-1)/3
- for (int y = 0; y < 20; y++) {//若x,z皆为1时,最大执行次数为(100-3-1)/5
- for (int z = 0; z < 92; z++) {//若x,y皆为1时,最大执行次数为(100-3-5)/1
- if (x * 3 + y * 5 + z / 3 == 100 && x + y + z == 100) {//当满足两种情况时,既符合购买
- System.out.print("第" + s + "种符合情况--->");
- System.out.print("x=" + x + ",");
- System.out.print("y=" + y + ",");
- System.out.print("z=" + z);
- System.out.println();
- s++;
- }
- }
- }
- }
- }
- }
复制代码 输出结果:
第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的整数倍才行
附上我的代码:- public class Work {
- public static void main(String[] args) {
- int i=1;
- for(int x=0;x<100;x++)
- {
- for(int y=0;y<100;y++)
- {
- for(int z=0;z<100;z++)
- {
- if (x*3 + y*5 + z/3 == 100 && x+y+z == 100 && z%3==0) {
- System.out.println("方案"+i+":公鸡"+x+"\t母鸡"+y+"\t小鸡"+z);
- i++;
- }
- }
- }
- }
- }
- }
复制代码 运行结果:
方案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 编辑
哥们,首先,你打印的x和y写反了,其次,没有了。。
作者: 深情小建 时间: 2013-9-28 21:31
嗯 好的 灰常感谢 哥们儿看的真仔细 赞一个{:soso_e179:}
作者: xiaoxu 时间: 2013-9-28 21:50
x*3 + y*5 + z/3 == 100
x+y+z == 100两个表达式相消,得出
4x+7y=100;这样就减少了循环的次数;以下是我的代码- public class Work {
- public static void main(String[] args) {
- int k=1;
- for(int i=0;i<14;i++){
- for(int j=0;j<=25;j++){
- if(7*i+4*j==100){
- System.out.println("第"+(k++)+"种:"+"公鸡:"+j+" 母鸡:"+i+" 小鸡:"+(100-i-j));
- }
- }
- }
- }
- }
复制代码 运行的结果:
第1种:公鸡:25 母鸡:0 小鸡:75
第2种:公鸡:18 母鸡:4 小鸡:78
第3种:公鸡:11 母鸡:8 小鸡:81
第4种:公鸡:4 母鸡:12 小鸡:84
作者: 猥琐_、大叔 时间: 2013-9-29 02:05
哥们写的真详细。真用心。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |