問題の説明:
n人の子供が輪になって座っています。先生は各子供にランダムに偶数個のキャンディーを与え、次のゲームをしました。
各子供はキャンディーの半分を左側の子供に分けました。
砂糖を割った後、キャンディーの数が奇数の子供には、先生から偶数が与えられます。
すべての子供が同じ数のキャンディーを持つまで、このゲームを繰り返します。
あなたの仕事は、教師が既知の最初のキャンディーの下で再発行する必要があるキャンディーの数を予測することです。
入力形式:
プログラムは最初に、子の数を表す整数N(2 <N <100)を読み取ります。
スペースで区切られたN個の偶数の行が続きます(各偶数は1000以下、2以上)
出力形式:
プログラムは、教師が再発行する必要のあるキャンディーの数を示す整数を出力する必要があります。
サンプル入力:
3
2 2 4
サンプル出力:
4
c参照コード:
#include <stdio.h>
int n;
int a[101];
/*检查小朋友糖果数是否相等*/
int check()
{
int i;
for(i=0;i<n-1;i++)
{
if(a[i]!=a[i+1])
return 0;
}
if(i==n-1)
return 1;
}
int main()
{
scanf("%d",&n);
int i,sum=0,t;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
int flag=check();
while(flag==0)
{
for(i=0;i<n;i++)
a[i]=a[i]/2;//每个小朋友的糖果数减半。
t=a[0];
for(i=0;i<n-1;i++)//每个小朋友都把自己的糖果分一半给左手边的孩子。
a[i]+=a[i+1];
a[n-1]+=t;
for(i=0;i<n;i++)//拥有奇数颗糖的孩子由老师补给1个糖果。
{
if(a[i]%2!=0)
{
sum++;
a[i]+=1;
}
}
flag=check();
}
printf("%d",sum);
return 0;
}