歷屆試題 分糖果 模擬

題目鏈接                                 藍橋杯---歷屆真題 題解

問題描述

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

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

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

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

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

#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
LL a[1000], b[1000];

LL solve(LL n){
	LL ans = 0;
	while(true){
		for(LL i = 0;i < n; i++){
			b[i]= a[i]/2+ a[(i+1)%n]/2;	
			if(b[i] % 2){
				b[i]++;
				ans++;
			}		
		}
		bool avg = true;
		for(LL i=1;i<n;i++){
			if(b[i] != b[i-1]){
				avg = false;
				break;
			}
		}
		if(avg) return ans;
		swap(a,b);	
	}
} 

int main(int argc, char *argv[]) {
	int n;
	cin>> n;
	for(int i = 0;i < n; i++)
		cin>> a[i];
	cout<< solve(n)<< endl;
	return 0;
}

輸入格式

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

輸出格式

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

樣例輸入

3
2 2 4

樣例輸出

4

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章