这种类型的题目只要理解了题意就很容易写出代码。
题意:n个人绕成一个圈,每个人手上都有偶数个糖果,每一轮的规则是:每个人同时把自己一半的糖果分给自己右边的人,那些一轮下来
手里的糖果数变成奇数的同学会多给一颗糖。再进行下一轮分享,直到每个人手里的糖果都一样多,要求输出进行的轮数和最后每个人手上的糖果数。
#include<stdio.h>
#include<string.h>
using namespace std;
int a[25000],b[25000];
int n;
int finish(int a[])
{
int i;
if(a[0]!=a[n-1])return 0;
else
{
for(i=0;i<n-1;i++)
{
if(a[i]!=a[i+1])
{
break;
}
}
if(i==n-1)return 1;
else return 0;
}
}
int main()
{
int i,count,k,temp;
while(scanf("%d",&n)&&n!=0)
{ count=0;k=0;memset(b,0,sizeof(b));
for(i=0;i<n;i++)
scanf("%d",&a[i]);
while(!k)
{
for(i=0;i<n;i++)
{
b[i]=(a[i]+a[(i-1+n)%n])/2;
if(b[i]%2==1)b[i]=b[i]+1;
}
for(i=0;i<n;i++)
a[i]=b[i];
count++;
k=finish(a);
}
printf("%d %d\n",count,a[0]);
}
return 0;
}