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]
廣告