分糖果 II(不是所有的轉都難,注意下標)

碎花喵發表於2020-10-14

排排坐,分糖果。

我們買了一些糖果 candies,打算把它們分給排好隊的 n = num_people 個小朋友。

給第一個小朋友 1 顆糖果,第二個小朋友 2 顆,依此類推,直到給最後一個小朋友 n 顆糖果。

然後,我們再回到隊伍的起點,給第一個小朋友 n + 1 顆糖果,第二個小朋友 n + 2 顆,依此類推,直到給最後一個小朋友 2 * n 顆糖果。

重複上述過程(每次都比上一次多給出一顆糖果,當到達隊伍終點後再次從隊伍起點開始),直到我們分完所有的糖果。注意,就算我們手中的剩下糖果數不夠(不比前一次發出的糖果多),這些糖果也會全部發給當前的小朋友。

返回一個長度為 num_people、元素之和為 candies 的陣列,以表示糖果的最終分發情況(即 ans[i] 表示第 i 個小朋友分到的糖果數)。

解:暴力法。如果還有糖就一直分,直到沒有糖為止。

class Solution {
public:
    vector<int> distributeCandies(int candies, int num_people) {
        vector<int> ans;
        for(int i=0;i<num_people;i++)
        {
            ans.push_back(0);
        }
        int count=1;
        int i=0;
        while(candies>0)
        {
            if(candies-count>=0)
            {
                cout<<count<<" ";
                ans[i%num_people]+=count;
                i++;
                candies -= count;
                count++;
            }
            else
            {
                count=candies;
                candies=0;
                cout<<count<<" ";
                ans[i%num_people]+=count;
                i++;
            }       
        }
        return ans;
    }
};

 

相關文章