注解
1、简单模拟题。
2、题意:每个人每轮分自己糖果的一半给右边的人。如果这个人最后的糖果是奇数,老师就再发给他一颗。直到所有人的糖果数都一样,就结束循环。
3、直接模拟即可,注意这些人其实是围成了一个圈,因此要用到周期性(取余运算)。
代码
#include <iostream>
using namespace std;
int main() {
int n;
cin>>n;
while(n) {
int a[n];
for(int i=0; i<n; i++) {
cin>>a[i];
}
int cnt = 1;
for(int i=1; i<n; i++) {
if(a[i]==a[0]) {
cnt++;
}
}
int ite = 0;
while(cnt!=n) {
ite++;
int half[n];
for(int i=0; i<n; i++) {
half[i] = a[i]/2;
}
for(int i=0; i<n; i++) {
a[i] = a[i]-half[i] + half[(i-1+n)%n];
if(a[i]%2) {
a[i]++;
}
}
cnt = 1;
for(int i=1; i<n; i++) {
if(a[i]==a[0]) {
cnt++;
}
}
}
cout<<ite<<" "<<a[0]<<endl;
cin>>n;
}
return 0;
}