如何用JavaScript生成5个和为100的随机数?
如何用JavaScript生成5个和为100的随机数?
这里提供两种实用的实现方式,满足不同需求:
方法一:分割点法(分布更均匀)
这种方法通过在0-100区间内设置4个随机分割点,将区间拆分成5段,每段长度即为对应随机数,天然保证总和为100。
function generateEqualDistributionNumbers() { // 生成4个0到100之间的随机分割点 const splits = Array.from({ length: 4 }, () => Math.random() * 100); // 对分割点排序,确保区间顺序正确 splits.sort((a, b) => a - b); // 计算每个区间的长度,得到5个数字 const numbers = [ Math.round(splits[0]), Math.round(splits[1] - splits[0]), Math.round(splits[2] - splits[1]), Math.round(splits[3] - splits[2]), Math.round(100 - splits[3]) ]; return numbers; } // 示例输出 console.log(generateEqualDistributionNumbers()); // 类似 [12, 25, 30, 18, 15]
如果不需要整数结果,去掉Math.round()即可得到浮点数。
方法二:确保所有数为正整数
若要求生成的5个数均为正整数(无0),可以用逐步分配的方式,每次为后续数字预留至少1的空间:
function generatePositiveIntegerNumbers() { const nums = []; let currentSum = 0; // 生成前4个随机数,每个数至少为1,且不超过剩余可分配的最大值 for (let i = 0; i < 4; i++) { // 计算当前可生成的最大值:剩余总和减去后面每个数至少1的量 const max = 100 - currentSum - (4 - i); const num = Math.floor(Math.random() * max) + 1; nums.push(num); currentSum += num; } // 最后一个数用剩余的总和填充 nums.push(100 - currentSum); return nums; } // 示例输出 console.log(generatePositiveIntegerNumbers()); // 类似 [8, 22, 35, 19, 16]
两种方法都能保证生成的5个数总和严格为100,可根据实际需求选择。
内容的提问来源于stack exchange,提问作者Felipe Gouvêa
相关产品推荐
相关产品推荐

