历届试题 分糖果
时间限制:1.0s 内存限制:256.0MB
问题描述
有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:
每个小朋友都把自己的糖果分一半给左手边的孩子。
一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。
反复进行这个游戏,直到所有小朋友的糖果数都相同为止。
你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。
每个小朋友都把自己的糖果分一半给左手边的孩子。
一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。
反复进行这个游戏,直到所有小朋友的糖果数都相同为止。
你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。
输入格式
程序首先读入一个整数N(2<N<100),表示小朋友的人数。
接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)
接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)
输出格式
要求程序输出一个整数,表示老师需要补发的糖果数。
样例输入
3
2 2 4
2 2 4
样例输出
4
1 #include "stdio.h" 2 #include <iostream> 3 using namespace std; 4 int count=0; 5 void fentangguo(int a[],int n){ 6 int m=a[0]; 7 int i; 8 for(i=0;i < n-1;i++){ 9 a[i]=a[i]/2+a[i+1]/2; 10 } 11 a[i]=a[i]/2+m/2; 12 } 13 void jiatangguo(int a[],int n){ 14 int i; 15 for(i=0;i < n;i++){ 16 if(a[i]%2==1){ 17 a[i]++; 18 count++; 19 } 20 } 21 } 22 int panduan(int a[],int n){ 23 int flag=1; 24 int i; 25 for(i=0;i < n-1;i++){ 26 if(a[i]!=a[i+1]){ 27 flag=0; 28 return flag; 29 } 30 } 31 return flag; 32 } 33 int main(){ 34 int n,flag=0; 35 int a[100]; 36 int i; 37 scanf("%d",&n); 38 for(i=0;i < n;i++){ 39 scanf("%d",&a[i]); 40 } 41 while(flag==0){ 42 fentangguo(a,n); 43 jiatangguo(a,n); 44 flag=panduan(a,n); 45 } 46 printf("%d ",count); 47 return 0; 48 }