糖果"/>
蓝桥杯——分糖果
问题描述 有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每个小朋友都把自己的糖果分一半给左手边的孩子。 一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。 反复进行这个游戏,直到所有小朋友的糖果数都相同为止。 你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。输入格式 程序首先读入一个整数N(2<N<100),表示小朋友的人数。 接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)输出格式 要求程序输出一个整数,表示老师需要补发的糖果数。样例输入32 2 4样例输出4值得注意的是,在传递糖果时,所有的小盆友是同时进行的。在用程序模拟的时候,需要用循环。为了避免前一次传递影响下一次传递,循环必须从第一个开始,即先修改第一个小朋友的糖果数,再修改第二个,依次类推。此外,还要事先保存第一个小朋友的糖果的数目,这样即使在第一个小朋友的糖果数改变了之后,还能知道应该给最后一个小朋友的糖果的数目。举个例子:比如有四个小朋友,开始时他们的糖果数是a,b,c,d.一轮分糖果之后,他们的糖果数变成了:(a+b)/2,(b+c)/2,(c+d)/2,(d+a)/2。然后老师给奇数个糖果的小朋友一个糖果,以此类推,直到所有小朋友的糖果数一样,则结束。
#include<stdio.h>
#define MAXN 110
int a[MAXN];int main()
{int n,i,count=0;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&a[i]);}while(1){//检查所有小朋友的糖果数是否相等for(i=1;i<n;i++){if(a[i]!=a[0])break;}if(i==n)break;//每个小朋友都把自己的糖果分一半给左手边的孩子int num=a[0];for(i=0;i<n-1;i++){a[i]=(a[i]+a[i+1])/2;}a[i]=(a[i]+num)/2;//一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。for(i=0;i<n;i++){if(a[i]%2!=0){a[i]++;count++;}}}printf("%d\n",count);return 0;
}
更多推荐
蓝桥杯——分糖果
发布评论