将多个整数随机变量等于变量



使用javaScript,我将如何生成30个随机整数,并使这30个整数的总和为60000?我需要脚本每次运行时都会产生不同的数字,以确保总数始终为60000

var n = 30;
var total = 60000;
var min = 10;
var max = 5000;
for (i = 0; i < n; i++) { 
  // Math.floor(Math.random()*(max-min+1)+min); ??
} 

为了避免过多数量和少量,可能需要最小值和最大值

您可以尝试这样的事情:

逻辑

  • 接受最大总数和结果总数。
  • 现在,基于此number - 1n-1随机数,最后值应为max - currentSum。由于其余数字是随机的,因此此差异也将是随机的,这也将确保总体相等。
  • 现在您需要做的就是根据给定范围返回一个随机数。

我还添加了一个标志来检查唯一值。目前,我刚刚向其添加了1,但这不能确保其独特性,而是因为它的范围不超大,而不是纠正它。

代码

function getRandomInRange(max) {
  var raiseVal = Math.pow(10, (max.toString().length - 1) || 1);
  return Math.floor(Math.random() * raiseVal) % max;
}
function getRandomNumbers(max, n, uniqueNum) {
  var nums = [];
  var sum = 0;
  for (var i = 0; i < n - 1; i++) {
    let r = getRandomInRange(max - sum);
    if(uniqueNum && nums.indexOf(r) > -1){
      r += 1;
    }
    
    nums.push(r)
    sum += r;
    
  }
  nums.push(max - sum);
  console.log(nums)
  return nums
}
getRandomNumbers(3, 3, true)
getRandomNumbers(3, 3)
getRandomNumbers(1000, 10)
getRandomNumbers(600000, 30)

最新更新