我有一个函数getrand100()
返回从0-100打印200随机数
随机数写一段代码,打印数1-200以随机顺序有没有的他们重复。你可以调用getrand100()任意数量的时间从1到100得到随机数。
请帮忙怎么做?
我有一个函数getrand100()
返回从0-100打印200随机数
随机数写一段代码,打印数1-200以随机顺序有没有的他们重复。你可以调用getrand100()任意数量的时间从1到100得到随机数。
请帮忙怎么做?
创建一个数字从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等
这不会给你完美的统一分配,因为你只会使用两个有效数字,但它会给一个课堂上可以接受的结果分配。
定义getrand200()
为getrand100() + getrand100()
,因为你没有统一分布的要求。建立数字1-200的数组。使用getrand200
实现Fisher–Yates shuffle算法的倾斜版本。
您已经定义了C和Java - 那么,哪一个? – fge 2011-12-26 22:43:31
这是功课吗? – PeeHaa 2011-12-26 22:44:07
是家庭作业acually我正在寻找逻辑,所以我会实现在任何语言。 – 2011-12-26 22:45:57