固定总和的随机整数

我正在尝试创建一个函数,该函数返回总和固定的随机整数数组。

这是我的代码:

function arraySum(a) {
  return a.reduce((a, b) => a + b, 0)
}

function getRandomIntInclusive(min, max) {
  const minCeil = Math.ceil(min)
  const maxFloor = Math.floor(max)
  return Math.floor(Math.random() * (maxFloor - minCeil + 1)) + minCeil
}

function randomNumbersWithFixedSum(quantity, sum) {
  const randoms = [...Array(quantity - 1).keys()].map(q => getRandomIntInclusive(0, sum/quantity))
  const last = sum - arraySum(randoms)
  return [...randoms, last]
}

console.log(randomNumbersWithFixedSum(1, 100))
console.log(randomNumbersWithFixedSum(2, 100))
console.log(randomNumbersWithFixedSum(3, 100))
console.log(randomNumbersWithFixedSum(4, 100))
console.log(randomNumbersWithFixedSum(5, 100))

它有效,但这并不是我想要的。我希望每个数字都是随机的[0, sum]randomNumbersWithFixedSum函数中,我强制第一个(quantity-1)数字在中[0, sum/quantity],但我不喜欢。

如何创建[0, sum]总和为的真正随机数sum

力量

这是一个很好的例子,其中递归函数可以简化问题。每次执行仅计算一个随机数,然后使用更新的参数进行调用。请参阅注释以获取描述。

function getRandomNumberBetweenIncluding(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

function randomNumbersWithFixedSum(quantity, sum) {
    // only a single number required; return the passed sum.
    if (quantity === 1) {
        return [sum];
    }

    // Create one random number and return an array containing that number
    // as first item. Then use the spread operator and recursively execute
    // the function again with a decremented quantity and the updated  
    // maximum possible sum.
    const randomNum = getRandomNumberBetweenIncluding(0, sum);
    return [
        randomNum,
        ...randomNumbersWithFixedSum(quantity - 1, sum - randomNum),
    ];
}

console.log(randomNumbersWithFixedSum(1, 100));
console.log(randomNumbersWithFixedSum(2, 100));
console.log(randomNumbersWithFixedSum(3, 100));
console.log(randomNumbersWithFixedSum(4, 100));
console.log(randomNumbersWithFixedSum(5, 100));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Julia中具有固定行总和的整数随机矩阵

生成总和为固定值的非负(或正)随机整数

Python:生成 5 个具有固定总和的随机整数(每个都有自己的范围)

使用n个唯一整数生成随机整数而不进行替换以获得固定的总和(Python)

生成具有特定总和的随机整数

滚动总和然后使用此滚动总和获得随机整数

随机生成具有固定总和的位串

用Excel随机生成x个整数,y的总和

用随机生成的整数填充的数组的值的总和

生成N个随机整数,总和为R中的M

绘制总和等于 100 的 n 个随机整数

生成具有固定和和约束的随机整数

python - 如何使用随机打印总和小于或等于另一个整数的整数?

如何获得具有固定总和和大小的随机数列表

如何从不同的间隔生成随机数,在excel中加起来为固定总和?

Excel中具有固定总和的特定范围内的随机数

MATLAB:快速创建具有固定度数(行总和)的随机对称矩阵

如何在C ++中生成具有固定总和的随机值

迭代具有相同总和的固定大小正整数列表的算法

如何创建三个总和为特定值的随机整数?(Python)

如何在 python 中生成随机抽样。与整数。给定总和和大小

以给定的总和均匀地随机生成一个整数列表

打印使用随机输入的 5 个整数中的 4 个的最大和最小总和

用固定的数字池中的随机唯一整数填充向量

如何将一个整数随机分为固定数量的整数,以使获得的元组均匀分布?

固定匹配的随机组

总和输入整数

excel中整数的总和

整数列的总和是双倍