Java基礎------百元買百雞問題
問題描述: 公雞每只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
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。
Java基礎------百元買百雞問題