藍橋杯-分糖果

問題描述

有n個小朋友圍坐成一圈。老師給每個小朋友隨機發(fā)偶數(shù)個糖果,然后進行下面的游戲:
每個小朋友都把自己的糖果分一半給左手邊的孩子。
一輪分糖后,擁有奇數(shù)顆糖的孩子由老師補給1個糖果,從而變成偶數(shù)。
反復進行這個游戲,直到所有小朋友的糖果數(shù)都相同為止。
你的任務(wù)是預測在已知的初始糖果情形下,老師一共需要補發(fā)多少個糖果。

輸入

程序首先讀入一個整數(shù)N(2< N< 100),表示小朋友的人數(shù)。
接著是一行用空格分開的N個偶數(shù)(每個偶數(shù)不大于1000,不小于2)

輸出

要求程序輸出一個整數(shù),表示老師需要補發(fā)的糖果數(shù)。

分析

1.在循環(huán)中思考:
1.首先判斷是否完全相等,如果是相等就不需要計算了。
2.全體減半,由于大家都是偶數(shù)所以直接除以二就可以了。
3.全體成員加上前面哪個減半的數(shù),相當于把自己的糖果分享給了自己左手邊的小朋友,注意這里最后一個和第一個需要借助一個中間變量進行傳遞。
4.全體判斷奇偶,如果是奇數(shù)就+1,同時創(chuàng)建一個計數(shù)器也+1,再度進行循環(huán),等循環(huán)結(jié)束的時候輸出計數(shù)器即可。

#include <iostream>
using namespace std;
int main(){
    int n,res=0;
    scanf("%d",&n);
    int num[n];
    for(int i=0;i<n;i++){
        cin>>num[i];
    }
    
    while(1){
        bool flag =true;
        for(int i=1;i<n;i++){
            if(num[0] != num[i]){
                flag = false;
            }
        }
        if(flag)
            break;
            
        for(int i=0;i<n;i++)
            num[i] = num[i]/2;

        int temp=num[n-1];  
        for(int i=n-1;i>0;i--){
            num[i]+=num[i-1];
        }
        num[0]+=temp;
        
        for(int i=0;i<n;i++){
            if(num[i]%2 != 0){
                num[i]++;
                res++;
            }
        }
    }
    cout<<res<<endl;
    return 0;
}

思考
1.關(guān)于 true 與 false 的設(shè)置,個人在邏輯上有點混亂。需注意,只有一個不相等存在,就不能跳出循環(huán)。如果寫成

  bool flag =false;
        for(int i=1;i<n;i++){
            if(num[0] == num[i]){
                flag = true;
            }
        }
        if(flag)
            break;

這個時候,只有有一個相等。即可跳出循環(huán)。
2.關(guān)于每個小朋友分一半糖果給左手邊的小朋友。
因為在做加法的,已經(jīng)加過的數(shù)會發(fā)生改變,但是這是一個圓形的循環(huán),所以需要用一個額外的變量存儲一下那個已經(jīng)改變了值。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 邏輯在代碼中描述很清楚了,若是有比筆者更好的方法,希望一起討論
    Draper閱讀 545評論 2 0
  • 一、/*分糖果 問題描述有n個小朋友圍坐成一圈。老師給每個小朋友隨機發(fā)偶數(shù)個糖果,然后進行下面的游戲:每個小朋友都...
    逍遙_9353閱讀 786評論 1 1
  • 假期的最后兩天,選擇參加公司的內(nèi)訓充電。 今天主要是玩富樂人生大贏家游戲以及復盤。 游戲的基本盤面是這樣的: 其實...
    星新人閱讀 510評論 0 4
  • 人們常用學富五車這個成語來形容那些讀書多,學問大的人,認為他們非常聰明。 這樣的“聰明”又是如何養(yǎng)成的?顯而易見,...
    小丸子的鈴鐺閱讀 540評論 1 1
  • 2018年是我學習力度最大的一年——從【深度觸網(wǎng)】社群營銷,到兒童教育版塊學習;從【爸媽壹選】到NLP執(zhí)行師;從禪...
    yaoxin45閱讀 497評論 0 2

友情鏈接更多精彩內(nèi)容