题目描述
有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:
每个小朋友都把自己的糖果分一半给左手边的孩子。
一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。
反复进行这个游戏,直到所有小朋友的糖果数都相同为止。
你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。
输入格式
程序首先读入一个整数N(2< N< 100),表示小朋友的人数。
接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)
输出格式
要求程序输出一个整数,表示老师需要补发的糖果数。
样例输入
复制
3 2 2 4
样例输出
复制
4
小编不易,求个关注♥♥♥
#include<iostream>
using namespace std;
int main()
{
int n,cnt=0;//n是孩子数,cnt是老师补发糖数
cin >> n;
int* x = new int[n];
for (int i = 0; i < n; i++)cin >> x[i];
while (1)
{
int f = 1;//退出标准
for (int i = 0; i < n-1; i++)
{
if (x[i] != x[i + 1]) { f = 0; break; }
}
if (f)break;//全部相等就退出
for (int i = 0; i < n; i++)
{
if (x[i] % 2 != 0) { cnt++; x[i] += 1; }//奇数补糖,cnt++
}
int y = x[0];//记录第一个孩子的糖
for (int i = 0; i < n-1; i++)
{
x[i] = x[i] / 2 + x[i + 1] / 2;//自己的糖拿走一半,下个人的糖拿来一半
}
x[n - 1] = x[n - 1] / 2 + y / 2;//一圈,最后一个就是第一个拿
}
cout << cnt;
}