在 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]
以上是 在 JavaScript 中分发香蕉问题 的全部内容, 来源链接: utcz.com/z/338791.html