请教百钱买百鸡问题
public class D{
public static void main(String[] args){
int rooster,hen,chick;
for(rooster=0;rooster <=20;rooster++){
for(hen=0;hen <=33;hen++){
for(chick=3;chick <=300;chick++){
if((rooster+hen+chick==100)&&((5*rooster+3*hen+chick/3)==100)){
System.out.print ( "rooster 's num: " + rooster+ "\t ");
System.out.print ( " hen 's num: " + hen+ "\t ");
System.out.println( " chick 's num: " + chick+ "\t ");
}
}
}
}
}
}
我的计算结果是
rooster 's num:0 hen 's num:25 chick 's num:75
rooster 's num:3 hen 's num:20 chick 's num:77
rooster 's num:4 hen 's num:18 chick 's num:78
rooster 's num:7 hen 's num:13 chick 's num:80
rooster 's num:8 hen 's num:11 chick 's num:81
rooster 's num:11 hen 's num:6 chick 's num:83
rooster 's num:12 hen 's num:4 chick 's num:84
想请问到底错在哪里了??
[解决办法]
把:if((rooster+hen+chick==100)&&((5*rooster+3*hen+chick/3)==100)){
改为:if((rooster+hen+chick==100)&&((5*rooster+3*hen+chick/3.0)==100.0)){
int 除以 int 的意思是整数,并不会产生小数的,将 3 改成 3.0 就可以了。
[解决办法]
把 for(chick=3;chick <=300;chick++){ 这个循环去掉,改成:
chick = 100 - rooster - hen;
以便加快速度。
[解决办法]
错在chick/3 因为chick/3是取整的,可以这样改:if((chick%3==0)&&(rooster+hen+chick==100)&&((5*rooster+3*hen+chick/3)==100))
[解决办法]
//优化代码
for(rooster=0;rooster <=100/5;rooster++){
for(hen=0;hen <=(100-rooster*5)/3;hen++){
{
chick=100-rooster-hen;
if(chick%3!=0)
continue;
if(rooster*5+hen*3+chick/3==100)
System.out.println(....);//略
}
[解决办法]
//修正下,附带加点注释
for (int rooster = 1; rooster <= 100 / 5; rooster++) {//
for (int hen = 1; hen <= (100 - rooster * 5) / 3; hen++) {//根据总价100
//尽量减少循环
int chick = (100 - 5 * rooster - 3 * hen) * 3;//根据总价计算
if (rooster + hen + chick != 100)//根据总数判断
continue;
System.out.println( "rooster= " + rooster + ",hen= " + hen
+ ",chick= " + chick);
}
}
------解决方案--------------------
计算结果
rooster=4,hen=18,chick=78
rooster=8,hen=11,chick=81
rooster=12,hen=4,chick=84
[解决办法]
public class Baiqian
{
public static void main(String [] args)
{
int x=0,z=0;
int y;
for(int i=0;i <20;i++){
x=i;
for(int j=3;j <100;j+=3){
z=j;
y=100-x-z;
if(5*x+3*y+z/3==100&&y> 0&&x> 0){
System.out.print(x+ "\t "+y+ "\t "+z+ "\t ");
System.out.println();
}
}
}
}
}
[解决办法]
4 种是正确答案。
redduke1202 的循环应该从 0 开始,而不是从 1 开始。
[解决办法]
0,显然是不正确的答案,既然说买3样东西,那每样东西不能为0吧,至少要买1个
[解决办法]
循环从1开始,就过滤掉0了