在 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

回到顶部