歷屆試題 分糖果 (模擬)

問題描述

  有n個小朋友圍坐成一圈。老師給每個小朋友隨機發偶數個糖果,然後進行下面的遊戲:

  每個小朋友都把自己的糖果分一半給左手邊的孩子。

  一輪分糖後,擁有奇數顆糖的孩子由老師補給1個糖果,從而變成偶數。

  反覆進行這個遊戲,直到所有小朋友的糖果數都相同爲止。

  你的任務是預測在已知的初始糖果情形下,老師一共需要補發多少個糖果。

輸入格式

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

輸出格式

  要求程序輸出一個整數,表示老師需要補發的糖果數。

樣例輸入

3
2 2 4

樣例輸出

4

思路:

模擬就好了,數據比較水。

代碼:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int a[11000];
int n;
bool Judge()
{
    for(int i=1;i<n;i++)
    {
        if(a[i]!=a[i-1])
            return false;
    }
    return true;
}
int main()
{
    int ans=0;
    cin>>n;
    for(int i=0;i<n;i++) cin>>a[i];
    while(!Judge())
    {
        int e=a[0];
        for(int i=0;i<n;i++)
        {
            if(i==n-1)
                a[i]=a[i]/2+e/2;
            else
                a[i]=a[i]/2+(a[i+1]/2);

        }
        for(int i=0;i<n;i++)
        {
            if(a[i]%2==1)
            {
                a[i]+=1;
                ans++;
            }
        }
    }
    cout<<ans<<endl;
    return 0;
}

感悟:

雖然題目比較水,但是依然打算寫一篇博客。大後天就要比賽了,準備了兩個星期,代碼也碼了幾千行,熟悉了一下手感。對於一些算法問題,自己的解決能力還是不夠。另外,對於數學思維是自己的弱點,也是致命的缺點。希望最後會有一個好的結果吧,願所有的努力都不會被辜負。加油...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章