c - 蒙蒂霍尔实现

标签 c random probability

我最近看了一个关于 Monty Hall 问题的视频,觉得很有趣,所以我想到实现它,看看概率是否真的如预测的 66.6%。

这是我所拥有的,

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    int repeat = 5000000, i;
    int win = 0, lose = 0;

    for (i = 1; i <= repeat; i++) {
        int winDoor = rand();
        winDoor = winDoor % 4;

        int firstPick = rand();
        firstPick = firstPick % 4;

        if (winDoor == firstPick) {
            lose++;
        } else {
            win++;
        }
    }

    printf("%.2f percent win rate\n", ((float)win/(float)repeat)*100.00);
}

但是,使用上面的代码我似乎获得了 75% 的胜率(通过切换门)。我的代码有问题吗?或者说 66.6% (2/3) 是个谎言?

附注我实现的逻辑是,如果首先选择获胜门,通过切换,我们就输了。如果先选择输的门,通过切换,我们就赢了。这就是我对蒙蒂·霍尔问题的理解。

编辑:我实际上输入了 %4,因为我读到 %4 将代表 0-3。我忘了我需要1-3,而不是0-3。问题已解决。

最佳答案

原因是您使用的是 %4 而不是 %3。这会模拟 4 扇门而不是 3 扇,因此结果从 2/3 更改为 3/4

关于c - 蒙蒂霍尔实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46059125/

相关文章:

c - 如何读取二进制文件并将数据存储在C中的指针处

c++ - C & C++ 中数组的动态内存分配

c - 如何使用带有双指针变量(没有支持变量)的结构字段?

Java - 返回相同整数的随机 nextInt 方法

C++ mt19937 总是给出相同的数字,即使在播种时也是如此

r - 绘制具有多个参数的曲线

c - 数据结构中的链表

PHP - 伪随机数生成器?

python - 从python列表中选择两个数字,其概率随着它们之间的相对距离而衰减

c++ - 计算类似于二项式和的条件概率