问题描述: 公鸡每只3元,母鸡每只5元,小鸡三只一元,问100元买100只鸡有几种买法?
public static void main(String[] args) {
int count=0; //用count纪录总方案数
//假设 i 表示买母鸡的个数,j 表示买公鸡的个数,k 表示买小鸡的个数
for(int i=0;i<=100/5;i++){
for(int j=0;j<=100/3;j++){
for(int k=0;k<=100;k+=3){ //此处保证了小鸡的个数是3的倍数。只有这样花的钱才能是整数,而不是小数
if(i+j+k==num && i*5+j*3+k/3==money){
count++;
System.out.println("第"+count +"种方案:母鸡数:" + i + ",公鸡数:" + j + ",小鸡数:" + k );
}
}
}
}
System.out.println("一共" + count + "种买法!");
}
此处扩展为花money的钱买num只鸡的买法!!!
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.println("请输入您想买的总鸡数(整数):");
int num=scan.nextInt();
System.out.println("请输入您想要花多少钱买这些鸡(整数):");
int money=scan.nextInt();
int count=0; //用count纪录总方案数
//假设 i 表示买母鸡的个数,j 表示买公鸡的个数,k 表示买小鸡的个数
for(int i=0;i<=money/5;i++){ //i表示母鸡数,假设所有的money都买母鸡,则最多能买money/5个;所以i的取值范围为0-money/5
for(int j=0;j<=money/3;j++){ //j表示公鸡数,假设所有的money都买公鸡,则最多能买money/3个;所以j的取值范围为0-money/3
for(int k=0;k<=money*3;k+=3){ //k表示小鸡数,假设所有的money都买小鸡,则最多能买money*3个,所以k的取值范围为0-money*3
if(i+j+k==num && i*5+j*3+k/3==money){ //注意:小鸡的个数必须为3个倍数才能保证花的钱是整数,而没有小数的情况。
count++;
System.out.println("第"+count +"种方案:母鸡数:" + i + ",公鸡数:" + j + ",小鸡数:" + k );
}
}
}
}
System.out.println("一共" + count + "种买法!");
}
注意:
此段代码(代码段1):
for(int k=0;k<=money*3;k+=3){
if(i+j+k==num && i*5+j*3+k/3==money){
等价于(代码段2):
for(int k=0;k<=money*3;k++){
if(i+j+k==num && k%3==0 && i*5+j*3+k/3==money){
只是代码段1的效率要比代码段2要高,所以推荐使用代码段1。