蓝桥杯历届试题 分糖果

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

思路:
由于数据量不大,这道题可以直接模拟。

注意:
1. 小朋友给左边糖果时分的一半是自己原先糖果的一半,而不是接受过右边小朋友糖果后的一半。

代码:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long LL;


int N;
int num[110];
int give[110];

bool Judge(){
    int n = num[0];
    for(int i=1; iif(n != num[i]) return false;
    }
    return true;
}

int main()
{
    while(scanf("%d", &N) == 1){
        for(int i=0; iscanf("%d", &num[i]);
        }
        int ans = 0;
        while(!Judge()){
            for(int i=0; i2;
                give[i] = num[i];
            }
            for(int i=1; i1];
            }
            num[0] += give[N-1];
            for(int i=0; iif(num[i]&1){
                    num[i]++;
                    ans++;
                }
            }
        }
        printf("%d\n", ans);
    }
    return 0;
}

你可能感兴趣的:(acm)