首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

请问百钱买百鸡有关问题

2012-02-22 
请教百钱买百鸡问题publicclassD{publicstaticvoidmain(String[]args){introoster,hen,chickfor(rooster

请教百钱买百鸡问题
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了

热点排行