每個小朋友都把自己的糖果分一半給左手邊的孩子。
一輪分糖後,擁有奇數顆糖的孩子由老師補給1個糖果,從而變成偶數。
反覆進行這個遊戲,直到所有小朋友的糖果數都相同爲止。
你的任務是預測在已知的初始糖果情形下,老師一共需要補發多少個糖果。
接着是一行用空格分開的N個偶數(每個偶數不大於1000,不小於2)
2 2 4
分析:本題是一個模擬問題,需要創建一個
數組來存放每一個小朋友的糖果。主要就是
在While循環裏面來進行糖果的分配。
/**
*
*/
package 歷屆試題;
import java.util.Scanner;
/**
* @author Administrator
*
*/
public class 歷屆試題分糖果 {
/**
* @param args
* 有n個小朋友圍坐成一圈。老師給每個小朋友隨機發偶數個糖果,然後進行下面的遊戲:
每個小朋友都把自己的糖果分一半給左手邊的孩子。
一輪分糖後,擁有奇數顆糖的孩子由老師補給1個糖果,從而變成偶數。
反覆進行這個遊戲,直到所有小朋友的糖果數都相同爲止。
你的任務是預測在已知的初始糖果情形下,老師一共需要補發多少個糖果。
輸入格式
程序首先讀入一個整數N(2<N<100),表示小朋友的人數。
接着是一行用空格分開的N個偶數(每個偶數不大於1000,不小於2)
輸出格式
要求程序輸出一個整數,表示老師需要補發的糖果數。
樣例輸入
3
2 2 4
樣例輸出
4
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int min = 10000;
int max = 0;
Scanner sc=new Scanner(System.in);
int N=sc.nextInt();
int[] M=new int[N];
for (int i = 0; i < M.length; i++) {
M[i]=sc.nextInt();
}
int[] temp = new int[N];//第I個小孩的一半糖果
int count = 0;
// for (int i = 0; i < M.length; i++) {
// System.out.println(M[i]);
// }
while(min != max){
//求最大值和最小值並計算每個人糖果的一半
for (int i = 0; i < N; i++) {
temp[i]=M[i]/2;
if (M[i]>max) {
max=M[i];
}
if (M[i]<min) {
min=M[i];
}
}
if (min==max) {
break;
}else {
max=0;
min=10000;
}
for (int i = 0; i < N; i++) {
M[i]=temp[i]+temp[(i+1)%N];
if (M[i]%2!=0) {
M[i]++;
count++;
}
}
}
System.out.println(count);
}
}