
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1034
参考文章:https://blog.****.net/zyy173533832/article/details/37990885
题意:如果老师要每个小朋友的糖的数目相同,进行如下调整:从0号小朋友开始,将自己的糖的一半分给他右手边的小朋友,
如果糖数是奇数,老师就给他一块糖。
求经过多少次操作得到每个小朋友的糖的数目相同,还有小朋友们糖的数目相同的时候每个小朋友得到多少糖。
思路:模拟,建立一个二维数组,分别存储要分得的糖和已经有的糖。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[][],n;
int pd()
{
int i;
for(i=;i<n;i++)
{
a[i][]+=a[i][];
if(a[i][]%) a[i][]++;
}
for(i=;i<n;i++)
{
if(a[i][]!=a[i-][]) return ;
}
return ;
}
int main(void)
{
int i;
while(~scanf("%d",&n))
{
if(n==) break;
memset(a,,sizeof(a));
for(i=;i<n;i++) scanf("%d",&a[i][]);
int ans=;
while()
{
if(pd()) break;
ans++;
for(i=;i<n;i++)
{
int r=(i+)%n;
a[r][]=a[i][]/;
a[i][]/=;
}
}
cout<<ans<<" "<<a[][]<<endl;
}
return ;
}