【发布时间】:2014-01-06 07:56:41
【问题描述】:
所以基本上我用 C 语言编写了这个函数来生成从 1 到 50 的 5 个随机数:
#include <stdio.h>
#include <stdlib.h>
int main() {
int c, n;
printf("Five random numbers from 1 to 50 \n");
for (c = 1; c <= 5; c++) {
n = rand()%50 + 1;
printf("%d\n", n);
}
return 0;
}
我想知道如何确定此代码生成的数字彼此不同。
有什么帮助吗?
【问题讨论】:
-
你不能这是随机的性质,如果你存储以前的你可以比较那些,否则你不能。事实上,
rand只有 16 位非常差的伪随机性,这几乎是一种保证。这种特殊设置也不会产生均匀分布。如果你想使用更好的随机我建议random_r -
如果你想要 50 中的五个 distinct 数字,你可以对 1..50 的序列进行随机播放(使用
rand()和一个像样的随机播放算法,例如七遍-swap),然后从序列中取出前五个数字。还有其他方法,但这很类似于从您的描述中洗牌。 -
你能举个小例子吗@Mgetz?
-
@WhozCraig 你能举个例子吗?
-
当然。 See it live。但是,您应该在下面查看 BLUEPIXY 的答案,因为它的效率要高得多。