ブルーブリッジカップ過去数年のZhenti-DivideCandy

問題の説明:
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;
}

おすすめ

転載: blog.csdn.net/qq_46139801/article/details/115218739