1. 程式人生 > >藍橋杯 分糖果 c++

藍橋杯 分糖果 c++

藍橋杯競賽題分糖果,由於題目比較簡單,只有按照題目的意思寫出程式碼就好了。
沒什麼難度,註釋也不想寫了,看著程式碼就應該能懂。
蘇州大學,右京先生。陸陸冬。

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

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

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

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

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

#include <iostream>
using namespace std;
int n; int a[100];
int main()
{
	bool flag;
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
	}
	int nAns = 0;
	int temp;
	while (true)
	{
		for (int i = 1; i <= n; i++)
		{
			if (1 == i)
			{
				temp = a[i] / 2;
				a[i] -= temp;
			}
			else
			{
				a[i - 1] += a[i] / 2;
				a[i] -= a[i] / 2;

			}
		}
		a[n] += temp;
		for (int i = 1; i <= n; i++)
		{
			if (a[i] % 2 == 1)
			{
				a[i] += 1;
				nAns++;
			}
		}
		flag = true;
		for (int i = 1; i < n; i++)
		{
			if (a[i] != a[i + 1])
			{
				flag = false;
			}
		}
		if (flag == true)
		{
			break;
		}
	}
	cout << nAns << endl;
	return 0;
}