首页 > 代码库 > HPU1290 分糖果 【模拟】

HPU1290 分糖果 【模拟】

1290: 分糖果

时间限制: 1 Sec  内存限制: 128 MB
提交: 1  解决: 1
[提交][状态][讨论版] [Edit]

题目描述

有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:   每个小朋友都把自己的糖果分一半给左手边的孩子。   一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。   反复进行这个游戏,直到所有小朋友的糖果数都相同为止。   你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。

输入

多组输入,程序首先读入一个整数N(2<n<100),表示小朋友的人数。 p=""   接着是一行用空格分开的n个偶数(每个偶数不大于1000,不小于2)<="">

输出

要求程序输出一个整数,表示老师需要补发的糖果数。

样例输入

3 2 2 4

样例输出

4

#include <stdio.h>
#include <string.h>

int A[102], B[102], N;

int main() {
	int i, j, ret, ok;

	while (scanf("%d", &N) == 1) {
		for (i = ret = 0; i < N; ++i)
			scanf("%d", &A[i]);

		while (true) {
			for (i = ok = 1; i < N; ++i)
				if (A[i] != A[i-1]) {
					ok = 0; break;
				}			
			if (ok) break;

			for (i = 0; i < N; ++i) {
				if (A[i] & 1) {
					++A[i]; ++ret;
				}
				A[i] >>= 1;

				j = i - 1;
				if (j == -1) j += N;

				B[j] = A[i];
			}

			for (i = 0; i < N; ++i)
				A[i] += B[i];
		}

		printf("%d\n", ret);
	}
	return 0;
}


HPU1290 分糖果 【模拟】