藍橋杯 分糖果 c++
阿新 • • 發佈:2019-01-12
藍橋杯競賽題分糖果,由於題目比較簡單,只有按照題目的意思寫出程式碼就好了。
沒什麼難度,註釋也不想寫了,看著程式碼就應該能懂。
蘇州大學,右京先生。陸陸冬。
前情提要:
問題描述
有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; }