作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近看了一个关于 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/
我是一名优秀的程序员,十分优秀!