将多个整数随机化为相等的变量

时间:2017-03-09 06:35:09

标签: javascript html integer

使用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); ??
} 

为了避免过大和过小的数字,可能需要最小值和最大值

1 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

逻辑

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

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

<强>代码

&#13;
&#13;
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)
&#13;
&#13;
&#13;