You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 15:57:16