题目链接 蓝桥杯---历届真题 题解
问题描述
有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每个小朋友都把自己的糖果分一半给左手边的孩子。 一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。 反复进行这个游戏,直到所有小朋友的糖果数都相同为止。 你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。
#include <iostream> #include <algorithm> using namespace std; typedef long long LL; LL a[1000], b[1000]; LL solve(LL n){ LL ans = 0; while(true){ for(LL i = 0;i < n; i++){ b[i]= a[i]/2+ a[(i+1)%n]/2; if(b[i] % 2){ b[i]++; ans++; } } bool avg = true; for(LL i=1;i<n;i++){ if(b[i] != b[i-1]){ avg = false; break; } } if(avg) return ans; swap(a,b); } } int main(int argc, char *argv[]) { int n; cin>> n; for(int i = 0;i < n; i++) cin>> a[i]; cout<< solve(n)<< endl; return 0; }输入格式
程序首先读入一个整数N(2<N<100),表示小朋友的人数。 接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)
输出格式
要求程序输出一个整数,表示老师需要补发的糖果数。
样例输入
3 2 2 4
样例输出
4