问题描述
有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:
每个小朋友都把自己的糖果分一半给左手边的孩子。
一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。
反复进行这个游戏,直到所有小朋友的糖果数都相同为止。
你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。
输入格式
程序首先读入一个整数N (2< N <100),表示小朋友的人数。
接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)
输出格式
要求程序输出一个整数,表示老师需要补发的糖果数。
样例输入
3
2 2 4
样例输出
4
解析:简单模拟即可,一开始没注意到最后一个不能直接同a[0]进行处理,因为前面的移动已经改变了a[0]的初始值,所以要多一步处理。
public class Main {static int n;static int[] a;static int cnt = 0;public static void main(String[] args) {Scanner in = new Scanner(System.in);n = in.nextInt();a = new int[n + 1];for (int i = 0; i < n; i++) {a[i] = in.nextInt();}while (true) {int j = 0;for (j = 1; j < n; j++) {if (a[0] != a[j]) {break;}}if (j == n) {break;}int x = a[0];for (int i = 0; i < n-1; i++) {a[i] = (a[i] + a[i+1]) / 2;}a[n-1] = (a[n-1] + x) / 2;for (int i = 0; i < n; i++) {if (a[i] % 2 != 0) {a[i] += 1;cnt++;}}}System.out.println(cnt);}
}