【问题标题】:Divide a number n into x random parts such that sum of x parts is equal to number n [closed]将一个数字 n 分成 x 个随机部分,使得 x 个部分的总和等于数字 n [关闭]
【发布时间】:2020-03-19 09:31:59
【问题描述】:

这里n是个数,p是个数:

let n = 100;
let p = 11;
let obj = [];
console.log(Math.round(n/p))
while (p != 0){

  let value = Math.round(Math.random() * n);
  obj.push(value);
  n -= value;
  p--;
}

console.log(obj);

这是输出: [ 68, 18, 1, 5, 0, 6, 2, 0, 0, 0, 0 ]

【问题讨论】:

  • 它有什么问题?
  • 我不想在我的最终数组中出现零,而且主要约束是它的总和必须等于数字 n。

标签: javascript random


【解决方案1】:

您可以从总和中减去所需的最小值以进行分配,然后将其余部分作为最后一个元素。

let n = 100;
    p = 11;
    result = [];

while (--p) {
    let value = Math.floor(Math.random() * (n - p - 1)) + 1;
    result.push(value);
    n -= value;
} 
result.push(n);

console.log(...result);
console.log(result.length, result.reduce((a, b) => a + b));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    相关资源
    最近更新 更多