JavaScript 中的香蕉分配問題


問題

假設有 n 個人排隊,我們希望按照以下方式向這些人分發香蕉:

  • 我們給第一個人 1 根香蕉,第二個人 2 根香蕉,以此類推,直到我們給最後一個人 n 根香蕉。

  • 然後,我們回到隊伍的開頭,給第一個人 n + 1 根香蕉,第二個人 n + 2 根香蕉,以此類推,直到我們給最後一個人 2 * n 根香蕉。

  • 這個過程重複進行(每次我們多給一根香蕉,並在到達隊伍末尾後回到隊伍的開頭),直到我們用完所有的糖果。最後一個人將收到我們剩下的所有香蕉。

我們需要編寫一個 JavaScript 函式,該函式以人數 num 作為第一個引數,以香蕉數量 m 作為第二個引數。

我們的函式應該返回一個數組(長度為 num sum m),表示香蕉的最終分配情況。

例如,如果函式的輸入為:

const num = 3;
const m = 10;

那麼輸出應該為:

const output = [5, 2, 3];

輸出解釋

在第一輪,res[0] += 1,陣列為 [1,0,0]。

在第二輪,res[1] += 2,陣列為 [1,2,0]。

在第三輪,res[2] += 3,陣列為 [1,2,3]。

在第四輪,res[0] += 4,最終陣列為 [5,2,3]。

示例

程式碼如下:

 線上演示

const num = 3;
const m = 10;
const distributeBananas = (num = 1, m = 1) => {
   const res = new Array(num).fill(0);
   let curr = 1;
   while(true){
      for(let i = 0; i < num; i++){
         if(m < curr){
            res[i] += m
            return res
         };
         res[i] += curr;
         m -= curr;
         curr++;
      };
   };
};
console.log(distributeBananas(num, m));

輸出

控制檯輸出將為:

[5, 2, 3]

更新於:2021年4月7日

275 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告