我正在尝试创建一个生成没有重复值的随机数组的东西。我已经看过其他答案,但似乎没有一个可以帮助我理解。我想不出一种方法来实际生成不包含重复项的随机数。这是我到目前为止所尝试的:
srand(time(NULL));
int numbers [4];
for (int x=0; x!=4;x++)
{
numbers[x] = 1 + (rand() % 4) ;
printf("%d ", numbers[x]);
}
原文由 user3128016 发布,翻译遵循 CC BY-SA 4.0 许可协议
首先
rand()
是生成随机数,但不是没有重复的。如果你想生成一个 没有重复 的随机数组,那么
rand()
方法根本不起作用。假设您要 生成 一个包含 1000 个数字 的数组。在最好的情况下,假设您生成了前 999 个没有重复的数字,最后想到的是 生成 最后一个数字。 得到这个数字的概率是 1⁄1000 ,所以这几乎要花很长时间才能生成。在实践中,只有 10 个数字会造成很大的麻烦。
最好的方法是通过递增( 或严格单调序列)生成所有数字,即 随机播放 它们。在这种情况下,不会有 重复
这 是一个关于如何使用 10 个数字进行操作的示例。即使有 1000 个号码,它也能 正常工作。
注意:来自 Jhon Leehey 的 答案 的随机播放功能。