分糖果

  历届试题 分糖果  
时间限制:1.0s   内存限制:256.0MB
    
问题描述
  有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:

  每个小朋友都把自己的糖果分一半给左手边的孩子。

  一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。

  反复进行这个游戏,直到所有小朋友的糖果数都相同为止。

  你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。
输入格式
  程序首先读入一个整数N(2<N<100),表示小朋友的人数。
  接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)
输出格式
  要求程序输出一个整数,表示老师需要补发的糖果数。
样例输入
3
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\n",count);
47     return 0;
48 } 

 

posted @ 2019-03-22 11:08  kakaluotedj  阅读(156)  评论(0编辑  收藏  举报