藍橋杯之分糖果

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

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

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

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

  你的任務是預測在已知的初始糖果情形下,老師一共需要補發多少個糖果。
輸入格式
  程序首先讀入一個整數N(2<N<100),表示小朋友的人數。
  接着是一行用空格分開的N個偶數(每個偶數不大於1000,不小於2)
輸出格式
  要求程序輸出一個整數,表示老師需要補發的糖果數。
樣例輸入
3
2 2 4
樣例輸出

4


沒啥好說的,直接貼代碼

#include <iostream>
using namespace std;
int candy[100];
int N;
bool judge()
{
	int i;
	for(i=1;i<N;i++)
	{
		if(candy[i]!=candy[0])
			return false;
	} 
	return true;
} 

int distributeCandy()
{
	int temp=candy[0];
	int i;
	int number=0;
	for(i=0;i<N-1;i++){
		candy[i]=(candy[i]+candy[i+1])/2;
		if(candy[i]%2!=0)
		{
			number++;
			candy[i]++;
		}
			
	}
	candy[N-1]=(temp+candy[N-1])/2;
	if(candy[N-1]%2!=0)
	{
		number++;
		candy[N-1]++;
	}
		
	return number;	

}


int main()
{
	int number=0;
	int i; 
	cin>>N;
	for(i=0;i<N;i++){
		cin>>candy[i];
	}
	while(1){
		if(judge())
			break;
		number+=distributeCandy();	
	}
	cout<<number;
	return 0;	
}
AC了


發佈了27 篇原創文章 · 獲贊 17 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章