三门问题(换门):

#include <iostream>

#include <cstdlib>

#include <ctime>

#define random(a,b) (rand() % (b-a+1))+ a

using namespace std;

int main()

{

srand((int)time(0));

int doors[3];

int mode;

int choose;

int result;

int success = 0;

for(int i = 0;i < 10000;++i) {//模拟一万次

mode = random(1,3);//3门问题的排列组合总共有三种情况

if(mode == 1) {//模式一是前两个门是羊,后一个门是汽车

doors[0] = 1;

doors[1] = 1;

doors[2] = 2;

choose = random(0,2);//玩家随机选择其中一个门

if(choose == 0) {//根据规则得到结果

result = 2;

}

else if(choose == 1) {

result = 2;

}

else {

result = 0;

}

if(doors[result] == 2) {//判断门后是否为汽车,如果为汽车,则统计量加1

++success;

}

}

else if(mode == 2) {//模式二为车、羊、羊

doors[0] = 2;

doors[1] = 1;

doors[2] = 1;

choose = random(0,2);

if(choose == 0) {

result = 1;

}

else if(choose == 1) {

result = 0;

}

else {

result = 0;

}

if(doors[result] == 2) {

++success;

}

}

else {//模式三为羊、车、羊

doors[0] = 1;

doors[1] = 2;

doors[2] = 1;

choose = random(0,2);

if(choose == 0) {

result = 1;

}

else if(choose == 1) {

result = 0;

}

else {

result = 1;

}

if(doors[result] == 2) {

++success;

}

}

}

cout << success << endl;//输出成功的总数

return 0;

}

三门问题(不换门):

#include <iostream>

#include <cstdlib>

#include <ctime>

#define random(a,b) (rand() % (b-a+1))+ a

using namespace std;

void game(int &success);//模拟做出选择后不更改的函数

int doors[3];

int main()

{

srand((int)time(0));

int mode;

int choose;

int result;

int success = 0;

for(int i = 0;i < 10000;++i) {//实验一万次

mode = random(1,3);//3门问题的排列组合总共有三种情况

if(mode == 1) {//模式一是前两个门是羊,后一个门是汽车

doors[0] = 1;

doors[1] = 1;

doors[2] = 2;

game(success);

}

else if(mode == 2) {//模式二为车、羊、羊

doors[0] = 2;

doors[1] = 1;

doors[2] = 1;

game(success);

}

else {//模式三为羊、车、羊

doors[0] = 1;

doors[1] = 2;

doors[2] = 1;

game(success);

}

}

cout << success << endl;//输出成功的总数

return 0;

}

void game(int &success) {

int result;

result = random(0,2);//随机选择一扇门

if(doors[result] == 2) {//如果选对了,统计量+1

++success;

}

}

结果:

换门后成功拿到汽车的频率10组数据如下,都接近三分之二(0.6666)

0.6692
0.6717
0.6697
0.669
0.6616
0.6712
0.6663
0.6693
0.6656
0.6686

不换门成功拿到汽车的频率10组数据如下,都接近三分之一(0.3333)

0.3409
0.3325
0.3399
0.3388
0.3354
0.3289
0.3337
0.3337
0.3343
0.3342

由此可见,三门问题的结论是正确的。

用C++验证三门问题的更多相关文章

  1. 三门问题模拟对比试验——附VB6和Python3源程序及EXE文件

    三门问题模拟对比试验 [直接跳转到文件下载] 前言 "三门问题"是一个很有意思的概率论问题,涉及贝叶斯公式,是人工智能领域的一个经典问题. 为了直观地研究这个问题,也为了测试一下P ...

  2. 用python验证蒙提霍尔问题

    最初看到这个问题是初中的时候买了一本有关数学谜题的书里面概率论的一张的课后拓展就是说到三门问题,当时作为一个扩展阅读看了一下,里面说到了一个世界智商最高的女人秒杀了美国一大群的数学高材生的精彩故事(比 ...

  3. 【探索】无形验证码 —— PoW 算力验证

    先来思考一个问题:如何写一个能消耗对方时间的程序? 消耗时间还不简单,休眠一下就可以了: Sleep(1000) 这确实消耗了时间,但并没有消耗 CPU.如果对方开了变速齿轮,这瞬间就能完成. 不过要 ...

  4. C# 中参数验证方式的演变

    一般在写方法的时候,第一步就是进行参数验证,这也体现了编码者的细心和缜密,但是在很多时候这个过程很枯燥和乏味,比如在拿到一个API设计文档的时候,通常会规定类型参数是否允许为空,如果是字符可能有长度限 ...

  5. Yii1.1的验证规则

    在Yii1.1的数据验证是由CValidator完成,在CValidator中提供了各种基本的验证规则 <?php public static $builtInValidators=array( ...

  6. 【WCF】使用“用户名/密码”验证的合理方法

    我不敢说俺的方法是最佳方案,反正这世界上很多东西都是变动的,正像老子所说的——“反(返)者,道之动”.以往看到有些文章中说,为每个客户端安装证书嫌麻烦,就直接采用把用户名和密码塞在SOAP头中发送,然 ...

  7. PHP验证用户登录例子-学习笔记

    1.基本流程: 2.UML类图: 3.PHP代码: 3.1 index.php <?php /** * Created by PhpStorm. * User: andy * Date: 16- ...

  8. 客户端的验证插件validator

    简单,智能,令人愉悦的表单验证~~~ 官方文档:http://www.niceue.com/validator/ <!DOCTYPE html> <html> <head ...

  9. ASP.NET MVC5+EF6+EasyUI 后台管理系统(66)-MVC WebApi 用户验证 (2)

    系列目录 前言: 回顾上一节,我们利用webapi简单的登录并进行了同域访问与跨域访问来获得Token,您可以跳转到上一节下载代码来一起动手. 继续上一篇的文章,我们接下来演示利用拿到的Token来访 ...

随机推荐

  1. NC使用练习之通达OA-2017版本漏洞复现后续

    利用上一篇通达OA的漏洞环境,练习NC工具的使用. 步骤: 1.本机启动nc.exe监听端口: 确认端口是否成功监听成功: 2.用冰蝎将nc.exe上传至目标机: 3.用命令行在目标机启动nc.exe ...

  2. dns的抓包分析

    dns: 域名系统(服务)协议 dns的解析全过程: 1. 浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果有,解析结束.同时域名被缓存的时间也可通过TTL属性来设置. 2. 如果浏 ...

  3. (转)对 Linux 专家非常有用的 20 个命令

    谢谢你你给了我们在这篇文章前两个部分的喜欢,美言和支持.在第一部分文章中我们讨论了那些都只是切换到 Linux 和linux新手所需的必要知识的用户的命令. 对 Linux 新手非常有用的 20 个命 ...

  4. (转)对 Linux 新手非常有用的 20 个命令

    你打算从Windows换到Linux上来,还是你刚好换到Linux上来?哎哟!!!我说什么呢,是什么原因你就出现在我的世界里了.从我以往的经验来说,当我刚使用Linux,命令,终端啊什么的,吓了我一跳 ...

  5. 怎么在java 8的map中使用stream

    怎么在java 8的map中使用stream 简介 Map是java中非常常用的一个集合类型,我们通常也需要去遍历Map去获取某些值,java 8引入了Stream的概念,那么我们怎么在Map中使用S ...

  6. 【Linux常见命令】vimdiff命令

    在类nuix平台,我们希望对文件之间的差异之间快速定位,希望能够很容易的进行文件合并……. 可以使用Vim提供的diff模式,通常称作vimdiff,就是这样一个能满足所有这些需求,甚至能够提供更多的 ...

  7. 【Linux常见命令】sort命令

    sort - sort lines of text files sort命令用于将文本文件内容加以排序. sort可针对文本文件的内容,以行为单位来排序. 语法: sort [OPTION]... [ ...

  8. 从实践出发:微服务布道师告诉你Spring Cloud与Boot他如何选择

    背景 随着公司业务量的飞速发展,平台面临的挑战已经远远大于业务,需求量不断增加,技术人员数量增加,面临的复杂度也大大增加.在这个背景下,平台的技术架构也完成了从传统的单体应用到微服务化的演进. 系统架 ...

  9. 关于LinearLayout设置权重后width或height不设置0dp的影响说明

    摘要 平时没那么注意LinearLayout布局时权重的问题,设置了权重属性后,通常建议将width或height的属性值设置为0dp,有时候设置权重后,还是习惯将width或height的属性设置为 ...

  10. vlookup匹配不出,明明文本内容是一样的,求解答。

    看起来很简单,肉眼看都知道就是匹配他,但是就是匹配不出.用trim去掉了空格,用分列去掉空格.tab这些看不见的.也改了单元格是数字型,而且粘贴是用数值型粘贴,全都匹配不出用if函数验证两个匹配对象是 ...