我试图获取0到1000之间的非重复随机数列表,每个随机数之间的差异将超过10.这意味着任何所选数字之间的差异都不能超过10。等于或小于10。
我想在svg中添加一些文字,其x和y坐标不在相同或靠近的位置。
randomNumbers = [];
// First, pick a bin size b
var b = 40;
// Then generate a random number n0 between 0 and b
var n0 = Math.floor(Math.random()*b);
while(randomNumbers.length < 20){
// Then generate the next random number n1 between n0 + 10 and n0 + 10 + b
var minRange = n0 + 10;
var maxRange = n0 + 10 + b;
var n1 = Math.floor(Math.random()*(maxRange - minRange) + minRange);
randomNumbers.push(n1);
n0 = n1;
// Continue in this manner until you have as many numbers as you need
}
// If you need them to be in random order, shuffle them after they are generated.
function shuffle(array) {
let counter = array.length;
// While there are elements in the array
while (counter > 0) {
// Pick a random index
let index = Math.floor(Math.random() * counter);
// Decrease counter by 1
counter--;
// And swap the last element with it
let temp = array[counter];
array[counter] = array[index];
array[index] = temp;
}
return array;
}
var shuffledRandomNumbers = shuffle(randomNumbers);
答案 0 :(得分:0)
首先,选择一个bin大小 b (比方说,20)。然后在0和 b 之间生成一个随机数 n 0 。然后在 n 0 + 10和 n 之间生成下一个随机数 n 1 0 + 10 + b 。以这种方式继续(使用 n i -1 + 10和 n i < / em> -1 + 10 + b 生成 n i )直到你拥有as您需要的许多数字或直到 n i 超过1000。
至于选择一个bin大小,我会选择一些东西,以便1000 /( b + 10)与你需要的数字相关。
如果您需要它们是随机顺序,请在生成它们后随机播放它们。