1. 程式人生 > >Java基礎------百元買百雞問題

Java基礎------百元買百雞問題

spa pub 擴展 整數 scan void 個數 sta amp

問題描述: 公雞每只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。

Java基礎------百元買百雞問題