题目意思是说,一群人围在一起,每个人手上有偶数个糖果,把自己手中的一半数量糖果给右边的人,如果有人出现奇数个糖果,老师会再给他一个。一直循环,直到所有人的糖果数相同,输出循环次数和相同糖果数量。
刚开始一直都是WR,因为判断糖果是否为奇数的时机早了,应该是每模拟一圈,就要将奇数换成偶数,这样判断相等的时候就不会出错了。
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
int Candy[1005];
int main()
{
int N;
while((scanf("%d",&N)) && N!=0)
{
memset(Candy,0,sizeof(Candy));
int i;
for(i = 1; i <= N; i++)
{
scanf("%d",&Candy[i]);
}
int round = 0;
for(; ; round++)
{
int flag = 1;
for(i = 2; i <= N; i++) //判断相等,只要每一个和前一个相等就能说明都相等
{
if(Candy[i]!=Candy[i-1])
{
flag = 0;
break;
}
}
if(flag==1)
{
printf("%d %d\n",round,Candy[1]);
break;
}
int End,t; //End表示前一个人给自己的糖果数量,即前一个人糖果数量一半
t = Candy[N]/2;
for(i = 1; i <= N; i++)
{
End = t;
t = Candy[i]/2; //t表示自己糖果数量一半
Candy[i] += End - t;
}
for(i = 1; i <= N; i++) //将所有的奇数变为偶数
{
if(Candy[i]%2!=0)
Candy[i]++;
}
}
}
return 0;
}