没有重复的随机数,并且彼此之间有范围

Random numbers without duplicates and range between each other

本文关键字:范围 彼此之间 随机数      更新时间:2023-09-26

我试图获得0到1000之间的非重复随机数列表,每个随机数彼此相差超过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);

首先,选择一个容器大小b(例如,20)。然后在0和b之间生成一个随机数n0。然后在n0 + 10和n0 + 10 + b之间生成下一个随机数n1。继续以这种方式(使用ni-1 + 10和ni + 10 + b生成ni),直到您有足够多的数字,或者直到ni超过1000。

至于选择一个箱子的大小,我会选择1000/(b + 10)是你需要的数字的数量。

如果需要随机排列,则在生成后重新排列。