[蓝桥杯][2014年第五届真题]分糖果-模拟
生活随笔
收集整理的這篇文章主要介紹了
[蓝桥杯][2014年第五届真题]分糖果-模拟
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
問題描述
有n個小朋友圍坐成一圈。老師給每個小朋友隨機發偶數個糖果,然后進行下面的游戲:
每個小朋友都把自己的糖果分一半給左手邊的孩子。
一輪分糖后,擁有奇數顆糖的孩子由老師補給1個糖果,從而變成偶數。
反復進行這個游戲,直到所有小朋友的糖果數都相同為止。
你的任務是預測在已知的初始糖果情形下,老師一共需要補發多少個糖果。
輸入
程序首先讀入一個整數N(2< N< 100),表示小朋友的人數。
接著是一行用空格分開的N個偶數(每個偶數不大于1000,不小于2)
輸出
要求程序輸出一個整數,表示老師需要補發的糖果數。
樣例輸入
3
2 2 4
樣例輸出
4
解題思路:
注意,最后一個小孩的左手邊是第一個小孩,我們先將最后一個小孩的糖果保存下來,然后加給第一個小孩就行。其他操作正常模擬
代碼如下:
#include <iostream> using namespace std; bool flag; int sum; const int N = 110; int a[N];int main() {int n;cin >> n;for (int i = 0; i < n; i++)cin >> a[i];while (1) {flag = 0;for (int i = 0; i < n - 1; i++) {if (a[i] != a[i + 1]) {flag = 1;break;}}if (!flag)break;for (int i = 0; i < n; i++)a[i] = a[i] / 2;int tmp = a[n - 1];for (int i = n - 1; i > 0; i--)a[i] = a[i] + a[i - 1];a[0] = a[0] + tmp;for (int i = 0; i < n; i++) {if (a[i] % 2) {a[i]++;sum++;}}}cout << sum << endl;return 0; }總結
以上是生活随笔為你收集整理的[蓝桥杯][2014年第五届真题]分糖果-模拟的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cdn能防ddos么(高仿cdn能抵御d
- 下一篇: [蓝桥杯][2013年第四届真题]剪格子