1. 程式人生 > >c語言網-1431-[藍橋杯][2014年第五屆真題]分糖果

c語言網-1431-[藍橋杯][2014年第五屆真題]分糖果

題目描述

問題描述
有n個小朋友圍坐成一圈。老師給每個小朋友隨機發偶數個糖果,然後進行下面的遊戲:

每個小朋友都把自己的糖果分一半給左手邊的孩子。

一輪分糖後,擁有奇數顆糖的孩子由老師補給1個糖果,從而變成偶數。

反覆進行這個遊戲,直到所有小朋友的糖果數都相同為止。

你的任務是預測在已知的初始糖果情形下,老師一共需要補發多少個糖果。

輸入

程式首先讀入一個整數N(2< N< 100),表示小朋友的人數。 
接著是一行用空格分開的N個偶數(每個偶數不大於1000,不小於2) 

輸出

要求程式輸出一個整數,表示老師需要補發的糖果數。

樣例輸入

3 
2  2  4 

樣例輸出

4
 #  include <iostream>
  using namespace std;
  int main ()
  {
  	int n;
  	cin>>n;
  	int array[10000];//儲存原來的陣列
	int array1[10000]; 
	int num;
	bool isSame=true;
  	for(int a=0;a<n;a++)
  	{
  		cin>>array[a];
	  }
	  while(1)
	  {
	  	isSame=true;
	    for(int a=0;a<n;a++)
	    {
	    	array1[a]=(array[a]+array[(a+1)%n])/2;
		}
		for(int a=0;a<n;a++)
		{
			if(array1[a]%2!=0)
			{
				array1[a]++;
				num++;
			}
		}
		for(int a=1;a<n;a++)
		{
			if(array1[a]!=array1[0])
			{
				isSame=false;
			}
		}
		if(isSame==true)
		{
			cout<<num <<endl;
			break;
		}
		else
		{
			for(int a=0;a<n;a++)
			{
				array[a]=array1[a];
			}
		}
		
	  }
  }