標題:分糖果

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

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

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

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

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

【格式要求】

程序首先讀入一個整數N(2<N<100),表示小朋友的人數。
接着是一行用空格分開的N個偶數(每個偶數不大於1000,不小於2)
要求程序輸出一個整數,表示老師需要補發的糖果數。

例如:輸入
3
2 2 4
程序應該輸出:
4

資源約定:
峯值內存消耗 < 256M
CPU消耗 < 1000ms

請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入…” 的多餘內容。

所有代碼放在同一個源文件中,調試通過後,拷貝提交該源碼。

注意: main函數需要返回0
注意: 只使用ANSI C/ANSI C++ 標準,不要調用依賴於編譯環境或操作系統的特殊函數。
注意: 所有依賴的函數必須明確地在源文件中 #include , 不能通過工程設置而省略常用頭文件。

#include<iostream>
using namespace std;
int main() {
	int a[105];
	int n,i,cnt=0;
	cin>>n;
	for(int i=0; i<n; i++) cin>>a[i];
	while(1) {
		for(i=1; i<n; i++) {
			if(a[i]!=a[0]) break;//判斷每個孩子糖果數是否相等
		}
		if(i==n) break;//如果所有孩子的糖果數相等了的話,就跳出循環,輸出結果
		int num=a[0];//存一下最左邊的孩子的值
		for(i=0; i<n-1; i++) {
			a[i]=(a[i]+a[i+1])/2;//相當於每個孩子同時拿出一半給左邊的孩子
		}
		a[i]=(a[i]+num)/2;//單獨算最後一個
		for(int i=0; i<n; i++) {
			if(a[i]&1) {
				cnt++;
				a[i]++;
			}
		}//在判斷有沒有奇數的
	}
	cout<<cnt<<endl;
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章