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]
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP