假设公鸡 2元/只,母鸡 3元/只,小鸡 3元/只,用100元买100只鸡,有多少种算法,求好理解的算法,感激不尽。
------解决方案--------------------
- Java code
for (int i=0; i<=100/2; i++) { //i表示公鸡数,最少0只,最多100(元)/2(元)=50只 for (int j=0; j<=(100-2*i)/3; j++) { //j表示母鸡数 int k = (100-i-j); //k表示小鸡数 if (2*i+3*j+3*k == 100) { //如果价钱刚好是100 System.out.printf("公鸡:%d, 母鸡:%d, 小鸡:%d\n", i, j, k); } }}
------解决方案--------------------
小鸡为1元3只时
[code=Java][/code]
for (int i=0; i<=100/2; i++) { //i表示公鸡数,最少0只,最多100(元)/2(元)=50只
for (int j=0; j<=(100-2*i)/3; j++) { //j表示母鸡数
int k = (100-i-j); //k表示小鸡数
if (2*i+3*j+k/3 == 100) { //如果价钱刚好是100
if(k%3==0){
System.out.printf("公鸡:%d, 母鸡:%d, 小鸡:%d\n", i, j, k);
}
}
}
}
------解决方案--------------------
[code=Java][/code]public class Chook{
public static void main(String args[])
{
int x,y,z;
for(x=0;x<50;x++)
{
for(y=0;y<33;y++)
{
if(2*x+3*y+(100-x-y)/3==100&&(100-x-y)%3==0)
System.out.println("公鸡有"+x+"只 母鸡有"+y+"只 小鸡有"+(100-x-y)+"只");
}
}
}
}
------解决方案--------------------
for (int i=0; i<=100/2; i++) { //i表示公鸡数,最少0只,最多100(元)/2(元)=50只
for (int j=0; j<=(100-2*i)/3; j++) { //j表示母鸡数
int k = (100-i-j); //k表示小鸡数
if (2*i+3*j+3*k == 100) { //如果价钱刚好是100
System.out.printf("公鸡:%d, 母鸡:%d, 小鸡:%d\n", i, j, k);
}
}
}
------解决方案--------------------
如果小鸡是一元3只:
for(int gj=0;gj<100/2;gj++){ //gj是公鸡的数量
for(int mj=0;mj<100/3;mj++){ //mj是母鸡的数量
for(int xj=0;xj<100*3;xj++){ //xj是小鸡的数量
if(gj*2+mj*3+xj/3==100&&gj+mj+xj==100){
System.out.println(gj+"----"+mj+"----"+xj);
}
}
}
}
------解决方案--------------------
------解决方案--------------------
都说这个问题无聊,其实给的都不是最简解法。
这个问题的最简解法不是双层循环,而是单层循环。
分析这个问题,完全可以简化。
如果100元全买小鸡,能买300只小鸡,多出来200的单位,这200的单位实际上是需要公鸡和母鸡数来抵消的。
一只公鸡等于6只小鸡,一只母鸡等于9只小鸡,所以每多一个公鸡,200就被抵消5,多一个母鸡,200被抵消8。
所以这个问题简化后,应该是:几个8和几个5的和等于200?(仔鸡数等于100-8的个数-5的个数)
很显然,单层循环就OK了。
------解决方案--------------------
穷举算法