如何生成添加到特定数字并在JavaScript范围内生成的随机数?

use*_*718 6 javascript random generator

我试图让它产生7个随机数.我在用

function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

function generateNum(max, thecount) {
    var r = [];
    var currsum = 0;
    for (var i = 0; i < thecount - 1; i++) {
        r[i] = getRandomInt(15, max - (thecount - i - 1) - currsum);
        currsum += r[i];
    }
    r[thecount - 1] = max - currsum;


    return r;

}
Run Code Online (Sandbox Code Playgroud)

这有时会返回NaN大于或等于40的数字(需要最大数量)

或小于15(需要是最小值),甚至小于0.

它生成的数字加起来是另一个随机数,介于110或150之间.

如何使其与总随机数相加并仍然在一定范围内?

Pau*_*per 3

我们必须确保有可能达到最小总数,并且不能超过最大总数。

对于每个数字,重新计算其最小值和最大值,以便仍然可以达到预期的总和。

function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

function randomInts(n, min, max, minSum, maxSum) {
    if (min * n > maxSum || max * n < minSum) {
       throw 'Impossible';
    }

    var ints = [];
    while (n--) {
        // calculate a lower bound for this number
        // n * max is the max of the next n numbers
        var thisMin = Math.max(min, minSum - n * max);
        // calculate an upper bound for this number
        // n * min is the min of the next n numbers
        var thisMax = Math.min(max, maxSum - n * min);

        var int = getRandomInt(thisMin, thisMax);
        minSum -= int;
        maxSum -= int;
        ints.push(int);
    }
    return ints; 
}
Run Code Online (Sandbox Code Playgroud)

为了完整起见,我应该指出有几种可能的方法可以选择概率分布。该方法至少确保每种可能的整数组合都具有非零概率。

  • 伴随您的代码的解释会很好。 (2认同)