藍橋杯 歷屆試題 分糖果 【模擬】
阿新 • • 發佈:2019-01-04
歷屆試題 分糖果
時間限制:1.0s 記憶體限制:256.0MB
問題描述
有n個小朋友圍坐成一圈。老師給每個小朋友隨機發偶數個糖果,然後進行下面的遊戲:
每個小朋友都把自己的糖果分一半給左手邊的孩子。
一輪分糖後,擁有奇數顆糖的孩子由老師補給1個糖果,從而變成偶數。
反覆進行這個遊戲,直到所有小朋友的糖果數都相同為止。
你的任務是預測在已知的初始糖果情形下,老師一共需要補發多少個糖果。 輸入格式 程式首先讀入一個整數N(2<N<100),表示小朋友的人數。
接著是一行用空格分開的N個偶數(每個偶數不大於1000,不小於2) 輸出格式 要求程式輸出一個整數,表示老師需要補發的糖果數。 樣例輸入 3
2 2 4 樣例輸出 4
每個小朋友都把自己的糖果分一半給左手邊的孩子。
一輪分糖後,擁有奇數顆糖的孩子由老師補給1個糖果,從而變成偶數。
反覆進行這個遊戲,直到所有小朋友的糖果數都相同為止。
你的任務是預測在已知的初始糖果情形下,老師一共需要補發多少個糖果。 輸入格式 程式首先讀入一個整數N(2<N<100),表示小朋友的人數。
接著是一行用空格分開的N個偶數(每個偶數不大於1000,不小於2) 輸出格式 要求程式輸出一個整數,表示老師需要補發的糖果數。 樣例輸入 3
2 2 4 樣例輸出 4
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; int a[110]; bool check(int n){ for(int i=1;i<n;++i){ if(a[i]!=a[i+1]) return 0; } return 1; } int main (){ int n,i,ans; while(cin>>n){ ans=0; for(i=1;i<=n;++i) cin>>a[i]; while(!check(n)){ int t=a[1]/2; a[1]=t; //a[n]+=t; for(i=2;i<=n;++i){ a[i-1]+=a[i]/2; a[i]=a[i]/2; } a[n]+=t; for(i=1;i<=n;++i){ if(a[i]%2){ a[i]++; ans++; } } } cout<<ans<<endl; } return 0; }