打印200个随机数

时间:2011-12-26 22:42:25

标签: algorithm random

我有一个函数getrand100(),它返回0-100

之间的随机数

编写一个代码片段,以随机顺序打印1-200号,但没有重复。您可以在任意时间调用getrand100()来获取1到100之间的随机数。

请帮忙怎么做?

2 个答案:

答案 0 :(得分:4)

创建一个0到200之间的数字数组。然后,使用Fisher-Yates Shuffle对它们进行随机播放。

由于getrand100函数只提供0到100之间的数字,所以请写下这样的内容:

int rnd = getrand100();
int scale = getrand100();
if (scale >= 50)
    rnd += 100;

这将为您提供0到200之间的随机数字。

实际上,它比这更复杂,因为随机数的范围会发生变化。也就是说,首先你要生成一个从0到200的随机数。下一次,从0到199,然后是198,197等。所以你需要一种方法来扩展你的随机数。像下面这样的东西可以让你合理地接近均匀分布:

int rnd = getrand100();
double frnd = rnd / 100.0;
int realRnd = round(frnd * range);

这假设您具有舍入功能。 range是您的范围的顶部。所以第一个电话range是200,然后是199,等等。

这不会给你完美的统一分布,因为你只会使用两位有效数字,但它会为课堂作业提供可接受的结果。

答案 1 :(得分:2)

getrand200()定义为getrand100() + getrand100(),因为您不需要统一分布。构建数字1-200的数组。使用getrand200实现Fisher–Yates shuffle算法的偏斜版本。