百元买百鸡问题
一、假设公鸡2元一只,母鸡1.5元一只,小鸡0.5元一只,现用100元买一百只鸡。
解决方案一:枚举法
把每一种情况都罗列出来,找出符合条件的情况。
int x,y,z;
int times = 0;
int index = 1;
for (x = 0;x <= 100;x++){
for (y = 0; y <= 100;y++){
for (z = 0;z <= 100;z++){
times++;
if (x + y + z == 100 && 2*x +1.5*y + 0.5*z == 100){
System.out.println("方案"+index+": 公鸡:"+x+"只 母鸡:"+y+"只 小鸡:"+z+"只");
index++;
}
}
}
}
System.out.println("总共循环了"+times+"次");
1.优化1.0版
利用x+y+z=100解出z=100-x-y,减少一层循环。
int x,y,z;
int times = 0;
int index = 1;
for (x = 0;x <= 100;x++){
for (y = 0; y <= 100;y++){
z = 100 - x - y;
times++;
if (x + y + z == 100 && 2*x +1.5*y + 0.5*z == 100){
System.out.println("方案"+index+": 公鸡:"+x+"只 母鸡:"+y+"只 小鸡:"+z+"只");
index++;
}
}
}
System.out.println("总共循环了"+times+"次");
2. 优化2.0版
方程一:100 = x+ y +z
方程二:100 = 2*x+1.5y+0.5z 200 = 4*x + 3*y + z
根据方程一和方程二推出方程三:100 = 3*x+2*y y = (100-3*x)/2 ,由此得知x只能取偶数,而且最大为32。
int x,y,z;
int times = 0;
int index = 1;
for (x = 0;x <= 32;x+=2){
y = (100 - 3*x)/2;
z = 100 - x - y;
times++;
if (x + y + z == 100 && 2*x +1.5*y + 0.5*z == 100){
System.out.println("方案"+index+": 公鸡:"+x+"只 母鸡:"+y+"只 小鸡:"+z+"只");
index++;
}
}
System.out.println("总共循环了"+times+"次");