我想用JavaScript生成1到100之间的100个不能重复的随机数,不需要排序,只生成100个不

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我想用JavaScript生成1到100之间的100个不能重复的随机数,不需要排序,只生成100个不相关的知识,希望对你有一定的参考价值。

我想用javascript生成1到100之间的100个不能重复的随机数,不需要排序,只生成100个不重复的随机数就行了 代码如何写

var getRandomArray = function()
var i = 0,
s = \'\',
sp = \',\',
next;
while (i < 100)
// 产生1-100的随机数
next = Math.random() * 100 + 1;
// 判断产生的数是否在随机数字符串里
if (s.indexOf(next) === -1)
// 不存在
// 则加上这条
s += next + sp;
// 并且记数器加1
i++;

// 否则记数器不加1,继续循环

// 最后得到的是xx,xx,形式的字符串
// 因为split函数会保留最后一个分隔符后的数
// 所以通过slice(0,-1)去掉最后一个字符(也就是,号)
// 这样99个分隔符拼成的字符串就会被,号分割
// 成100个随机数组了
return s.slice(0, -1).split(\',\');

alert(getRandomArray());

参考技术A 你确定是1-100,而不是1-1000或者10000??追问

Javascript:生成具有固定均值和标准差的随机数

我的问题:

如何在Javascript中创建具有给定均值和标准差(sd)的随机数列表?

例:

我想创建一个包含5个随机数的列表,范围在1到10之间。结果均值应为5,标准差应为2。

到目前为止我做了什么:

我的想法是(http://jsfiddle.net/QASDG/3/):

  1. 创建一个函数(名为“createData”),它创建1到10之间的5个随机数,并将它们推入“数组”
  2. 此函数还应计算这5个数字的平均值(和sd)。
  3. 使用“do-while”-loop:只要“average变为5”(并且“sd变为2”),就执行上述功能。但是当我调用do-while循环时,浏览器当然会崩溃,因为很多情况下平均值是!= 5(和sd!= 2)。

注意:我还没有添加SD,因为代码不是很优雅。

我发现该站点的另一个脚本声明:“此代码的目标是生成一个集合,其中包含5个正态分布的随机数,平均值为1.0,标准差为0.5。” http://rosettacode.org/wiki/Random_numbers#JavaScript。我试图通过添加“Math.floor”来调整它,并改变了“for”-loop(i <5)中的条件。

function randomNormal() {
    return Math.floor(Math.cos(2 * Math.PI * Math.random()) * Math.sqrt(-2 * Math.log(Math.random())))
}

var a = []
for (var i=0; i < 5; i++){
    a[i] = randomNormal() / 2 + 1
}

我想如何修改我的代码:

我不太确定我是否理解了这段代码的数学部分。根据网页,它将创建一个正常的分布(这是伟大的,但没有必要)。所以我需要的是:

  • 我在哪里可以更改给定的均值和sd(例如,mean = 5,sd = 2)以创建随机数(满足这些属性)。
  • 如何实现1到10之间的范围? (也许我可以使用类似的东西:Math.floor(Math.random()* 10)+1)

非常感谢!

答案

如何在JavaScript中创建具有给定均值和标准差(sd)的随机数列表?

这似乎是关于随机创建具有精确指定的mean和精确指定的standard deviation的数字列表的问题(而不是关于从具有给定均值和sd的特定概率分布中绘制随机数的问题)。

一个简单的解决方案是绘制一个随机数列表,然后移动并缩放此列表以获得所需的均值和sd,如stats.stackexchange中的described in this answer

比如说,我们在1到10之间生成以下5个随机数:

4.527991433628388
6.3254986488276055
5.123502737960912
7.3331068522336125
9.069573681037484

此列表具有6.4759346707376011.8102412442104023的sd的平均值。

然后,我们将列表中的每个数字转换为:

newNum = oldSD * (oldNum - oldMean) / oldSD + newMean

通过将新均值设置为5并将新sd设置为2,我们得到以下转换列表:

2.847863379160965
4.83379450402964
3.505799227476338
5.947025358346529
7.865517530986525

计算此列表的均值和sd确认它们确实是5和2。

下面是在JavaScript中演示此方法的代码:

// create a list of 5 random numbers between 1 and 10
var list = randomList(5, 1, 10);

// transform the list to have an exact mean of 5 and sd of 2
var newList = forceDescriptives(list, 5, 2);

// display the transformed list and descriptive statistics (mean and sd)
console.log('Transformed random list', newList, descriptives(newList));

// display the original list and descriptive statistics (mean and sd)
console.log('Original random list', list, descriptives(list));


/* demo functions */

function randomList(n, a, b) {
  // create a list of n numbers between a and b
  var list = [],
    i;
  for (i = 0; i < n; i++) {
    list[i] = Math.random() * (b - a) + a;
  }
  return list;
}

function descriptives(list) {
  // compute mean, sd and the interval range: [min, max]
  var mean,
    sd,
    i,
    len = list.length,
    sum,
    a = Infinity,
    b = -a;
  for (sum = i = 0; i < len; i++) {
    sum += list[i];
    a = Math.min(a, list[i]);
    b = Math.max(b, list[i]);
  }
  mean = sum / len;
  for (sum = i = 0; i < len; i++) {
    sum += (list[i] - mean) * (list[i] - mean);
  }
  sd = Math.sqrt(sum / (len - 1));
  return {
    mean: mean,
    sd: sd,
    range: [a, b]
  };
}

function forceDescriptives(list, mean, sd) {
  // transfom a list to have an exact mean and sd
  var oldDescriptives = descriptives(list),
    oldMean = oldDescriptives.mean,
    oldSD = oldDescriptives.sd,
    newList = [],
    len = list.length,
    i;
  for (i = 0; i < len; i++) {
    newList[i] = sd * (list[i] - oldMean) / oldSD + mean;
  }
  return newList;
}

以上是关于我想用JavaScript生成1到100之间的100个不能重复的随机数,不需要排序,只生成100个不的主要内容,如果未能解决你的问题,请参考以下文章

随机生成【1,100】之间的10个整数存放在数组中。

JS产生01到80的随机数

怎么求1~10之间的随机数 js

用JAVA 产生一个0到1的随机数

Javascript:生成具有固定均值和标准差的随机数

自动生成10个整数(1~100),求出生成数组中的最大值和最小值,以及显示排序后的数据。运行效果如图所示