藍橋杯——分糖果
阿新 • • 發佈:2019-02-01
問題描述 有n個小朋友圍坐成一圈。老師給每個小朋友隨機發偶數個糖果,然後進行下面的遊戲: 每個小朋友都把自己的糖果分一半給左手邊的孩子。 一輪分糖後,擁有奇數顆糖的孩子由老師補給1個糖果,從而變成偶數。 反覆進行這個遊戲,直到所有小朋友的糖果數都相同為止。 你的任務是預測在已知的初始糖果情形下,老師一共需要補發多少個糖果。輸入格式 程式首先讀入一個整數N(2<N<100),表示小朋友的人數。 接著是一行用空格分開的N個偶數(每個偶數不大於1000,不小於2)輸出格式 要求程式輸出一個整數,表示老師需要補發的糖果數。樣例輸入32 2 4樣例輸出4值得注意的是,在傳遞糖果時,所有的小盆友是同時進行的。在用程式模擬的時候,需要用迴圈。為了避免前一次傳遞影響下一次傳遞,迴圈必須從第一個開始,即先修改第一個小朋友的糖果數,再修改第二個,依次類推。此外,還要事先儲存第一個小朋友的糖果的數目,這樣即使在第一個小朋友的糖果數改變了之後,還能知道應該給最後一個小朋友的糖果的數目。
#include<stdio.h> #define MAXN 110 int a[MAXN]; int main() { int n,i,count=0; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&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; //一輪分糖後,擁有奇數顆糖的孩子由老師補給1個糖果,從而變成偶數。 for(i=0;i<n;i++) { if(a[i]%2!=0) { a[i]++; count++; } } } printf("%d\n",count); return 0; }