import java.util.Scanner;
/**
问题描述
有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每个小朋友都把自己的糖果分一半给左手边的孩子。
一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。 反复进行这个游戏,直到所有小朋友的糖果数都相同为止。
你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。
输入格式
程序首先读入一个整数N(2<N<100),表示小朋友的人数。
接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)
输出格式
要求程序输出一个整数,表示老师需要补发的糖果数。
样例输入
3 2 2 4
样例输出
4
*
* @author Vivinia
*
* 2018年2月12日
*/
public class Sweet {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int sum = 0, zero = 0;
int max = 0, min = 100000;// 用来判断是否全部想等(max == min)
boolean over = true;
int[] kids = new int[n]; // n个小朋友
for (int i = 0; i < n; i++)
kids[i] = input.nextInt();
input.close();
while (over) {
max = min = (kids[0]/2+kids[1]/2);
zero = kids[0];
kids[0] /= 2;
for (int i = 0; i < n; i++) {
if (i == n - 1) {
kids[i] += zero / 2;
} else {
kids[i] += kids[i + 1] / 2;
kids[i + 1] /= 2;
}
// 判断最大值最小值
if (kids[i] > max)
max = kids[i];
if (kids[i] < min)
min = kids[i];
}
if (max == min)
over = false;
for (int i = 0; i < n; i++) {
if (kids[i] % 2 == 1) {
kids[i]++;
sum++;
}
}
}
System.out.println(sum);
}
}
一开始思路是数组从后往前计算,但是发现会把问题想复杂,借鉴别人的代码如上从前往后做,会更容易。