使用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 - 1
的n-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)