题目描述:3文钱一只鸡,2文钱1只母鸡,1文钱3只小鸡,总共100文钱要买100只鸡,每种鸡至少最少需要买1只,小鸡不能分开买,输出所有可能的组合。
/*
* 百钱百鸡
* 3文钱一只鸡,2文钱1只母鸡,1文钱3只小鸡
*/
public static void baiqianbaiji() {
for (int i = 1; i < 33; i++) {
//System.out.println(i+"i");
for(int j = 1; j < 50;j++) {
//System.out.println(j+"j");
if (((100-i-j)%3==0)&&(i*3+2*j+1*((100-i-j)/3)==100)) {
System.out.println("公鸡:"+i+" 母鸡:"+j+" 小鸡:"+(100-i-j));
}
}
}
}
思路:先想,解决办法是先选一只公鸡,再选一只母鸡,剩下选小鸡,看看满足条件嘛?不满足那就继续,选一只公鸡,两只母鸡等等这样遍历出所有可能,在输出所有可能的结果。
优化:选鸡时确定了公鸡、母鸡,因为总数是100,也就确定了小鸡的数量,所以只需要两个for循环。
同时选公鸡时,因为选33只公鸡就是99文钱,这样就没办法买母鸡了,所以公鸡最多选32只,母鸡同理,这样就可以将循环进行优化,不需要循环100*100次。