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 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.