C++,某些组合永远不会出现使用 rand()

标签 c++ random

我对 0 和 2 之间的两个整数使用 rand()。看起来第一个整数永远不会是 0,而第二个整数是 2。这是我的测试代码-

#include <iostream>
#include <time.h>

int main()
{
    srand(time(NULL));
    int number1, number2;
    number1 = rand() % 3;
    number2 = rand() % 3;

    printf("%i, %i", number1, number2);
    return 0;
}

Output-25 次尝试

2, 2
2, 2
2, 1
1, 2
0, 1
2, 2
1, 2
1, 0
2, 1
1, 0
0, 0
1, 2
2, 2
0, 0
2, 1
1, 0
2, 2
1, 0
2, 1
1, 0
0, 1
1, 2
1, 0
0, 0
2, 2

如您所见,在 25 次尝试中,组合从来都不是 0、2。这是否表明我应该移至 ?此外,永远不会有 2、0。

最佳答案

不,这将发生在所有种子的 9*(1-1/9)^25 = 0.4736,或大约 50% 的时间。也就是说,在您运行程序的大约一半时间里,前 25 个结果中会丢失一些包含 {0,1,2} 中数字的两位数序列。

再次运行它,看看会发生什么。

关于C++,某些组合永远不会出现使用 rand(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26331605/

相关文章:

c++ - 用于找出隐式包含哪些文件的 Visual Studio 插件

c++ - 优先级队列和结构

c++ - WinSock 2.2 TCP/IPv4 send() 总是返回发送的所有字节

Javascript 随机名称总是返回相同的项目

c - 数组只打印零

c++ - 是否可以向 QStandardItem 添加自定义类?

c++ - 使用 wxWidgets 检查外部应用程序是否正在运行

python - 如何从文本文件中打印两个不同的随机行

在 R 中重现 "Computer composition with lines"

c++ - 找到随机排列数组的平均比较次数