Monty Hall Problem (三门问题)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Monty Hall Problem (三门问题)相关的知识,希望对你有一定的参考价值。
最近有点忙,没怎么写程序...今天突然想起以前看到过的一个问题-三门问题,十分想用程序来模拟一下,于是实在忍不住了就模拟了这个游戏的实验,通过写程序更加加深了我对这个问题的理解,期间也查找了各种相关资料进行了更深的了解。
下面是代码:
/* * Monty Hall Problem */ #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 10000000 //实验次数 #define bool int #define true 1 #define false 0 static bool InitRoom(int Goder, int player) { if(player == Goder) //玩家选对的情况 1/3 return true; else return false; } int main() { int i = N; int flag; int Goder; int player; double win = 0.0; double lost = 0.0; double x, y; srand(time(0)); while(i--) { Goder = rand()%3; player = rand()%3; //随机模拟玩家选择门的情况 flag = InitRoom(Goder, player); //判断是否猜对 //选则有两种情况,正确或者不正确,可看出我们赢的概率与在第一次选择不正确的概率有非常大的联系 //于是只考虑所有换的情况 if(flag) //选择正确 lost++; //换必定错误 if(!flag) //选择不正确 win++; //换必定正确 } x = win/N; y = 1.0 - x; printf("“换”的正确率:%lf “不换”的正确率:%lf “换”成功次数:%d “换”失败次数:%d\\n", x, y, (int)win, (int)lost); return 0; }
实验结论:
换 赢的概率为大约为66.7%,不换 赢的正确率大约为33.3%,换 赢的次数大约为:6666258,换 不赢的次数大约为:3333742 (ps:实验次数为10000000次)
* 总结:
*
*通过写程序来深入思考了三门问题,认识到的确对于这个问题的普遍情况都应该考虑换赢得可能性会更大,
*最主要的原因在于第一次选不对的情况有2/3,选对的情况只有1/3,那既然有2/3的情况都不能选对的话那么我们就不应该冒风险不换。
*比如 考虑玩10次三门游戏,10次全部选择了换,首先10次我们有20/3次的几率选不对,对于第一次选不对的情况只要换我们就能赢,所以我们选不对的所有情况中都赢了,也就是说我们每一盘赢得概率为(20/3)/10=66.7%。
*再比如 考虑100扇门,我们一次选中的概率只有1%,而选不中的概率为99%,所以,如果再给你机会换的话你难道不换吗?并且如果条件变为,100扇门,猜第一次,
*主持人把剩下的98扇门打开给你看,你会换吗?情况一样,打开的门是个迷惑的条件,会让人产生,那么剩下就只有两扇门,一扇自己选择的,一扇没打开的,
*那么自己换不换赢的概率都是二分之一了,实际上,门打不打开,自己第一次选择的概率都是不变的,不换,赢得概率还是1%,但是如果换,那么赢的概率将会增大为99%,
*因为这时你知道其他所有门都不会赢,而第一次选择的门能赢的概率只有1%。
最后,这个问题对我来说非常有吸引力,第一次看到的时候就留下了深深印象。好了,该问题在网上各论坛基本上已经被解释非常透彻了,所以,我不多说了。谢谢自己的学习和电脑或手机面前的你的观看~
参考资料:
3.知乎
以上是关于Monty Hall Problem (三门问题)的主要内容,如果未能解决你的问题,请参考以下文章