在 JavaScript 中分发香蕉问题
问题
假设有n人排队,我们希望按以下方式向人们分发香蕉-
我们给第一个人1个香蕉,给第二个人2个香蕉,依此类推,直到我们给最后一个人n个香蕉。
然后,我们回到行的开头,给第一个人n+1个香蕉,给第二个人n+2个香蕉,依此类推,直到我们给最后一个人2*n个香蕉。
重复这个过程(我们每次多给一个香蕉,在我们到达结束后移动到行的开头),直到我们用完糖果。最后一个人将收到我们所有剩余的香蕉。
我们需要编写一个JavaScript函数,该函数将人数num作为第一个参数,将香蕉的数量m作为第二个参数。
我们的函数应该返回一个表示香蕉最终分布的数组(长度为numsumm)。
例如,如果函数的输入是-
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]