用C++验证三门问题
三门问题(换门):
#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++验证三门问题的更多相关文章
- 三门问题模拟对比试验——附VB6和Python3源程序及EXE文件
三门问题模拟对比试验 [直接跳转到文件下载] 前言 "三门问题"是一个很有意思的概率论问题,涉及贝叶斯公式,是人工智能领域的一个经典问题. 为了直观地研究这个问题,也为了测试一下P ...
- 用python验证蒙提霍尔问题
最初看到这个问题是初中的时候买了一本有关数学谜题的书里面概率论的一张的课后拓展就是说到三门问题,当时作为一个扩展阅读看了一下,里面说到了一个世界智商最高的女人秒杀了美国一大群的数学高材生的精彩故事(比 ...
- 【探索】无形验证码 —— PoW 算力验证
先来思考一个问题:如何写一个能消耗对方时间的程序? 消耗时间还不简单,休眠一下就可以了: Sleep(1000) 这确实消耗了时间,但并没有消耗 CPU.如果对方开了变速齿轮,这瞬间就能完成. 不过要 ...
- C# 中参数验证方式的演变
一般在写方法的时候,第一步就是进行参数验证,这也体现了编码者的细心和缜密,但是在很多时候这个过程很枯燥和乏味,比如在拿到一个API设计文档的时候,通常会规定类型参数是否允许为空,如果是字符可能有长度限 ...
- Yii1.1的验证规则
在Yii1.1的数据验证是由CValidator完成,在CValidator中提供了各种基本的验证规则 <?php public static $builtInValidators=array( ...
- 【WCF】使用“用户名/密码”验证的合理方法
我不敢说俺的方法是最佳方案,反正这世界上很多东西都是变动的,正像老子所说的——“反(返)者,道之动”.以往看到有些文章中说,为每个客户端安装证书嫌麻烦,就直接采用把用户名和密码塞在SOAP头中发送,然 ...
- PHP验证用户登录例子-学习笔记
1.基本流程: 2.UML类图: 3.PHP代码: 3.1 index.php <?php /** * Created by PhpStorm. * User: andy * Date: 16- ...
- 客户端的验证插件validator
简单,智能,令人愉悦的表单验证~~~ 官方文档:http://www.niceue.com/validator/ <!DOCTYPE html> <html> <head ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(66)-MVC WebApi 用户验证 (2)
系列目录 前言: 回顾上一节,我们利用webapi简单的登录并进行了同域访问与跨域访问来获得Token,您可以跳转到上一节下载代码来一起动手. 继续上一篇的文章,我们接下来演示利用拿到的Token来访 ...
随机推荐
- QIntValidator没有最小值的限制,继承然后写个新类来控制最小值
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/firecityplans/article ...
- 企业级 Harbor 镜像仓库
Harbor是由VMWare公司开源的容器镜像仓库.事实上,Harbor是在Docker Registry上进行了相应 的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基 ...
- opencv-7-鼠标绘制自定义图形
opencv-7-鼠标绘制自定义图形 opencvc++qt 开始之前 昨天写了具体的基本的图形绘制, 然后我们使用相应的函数接口进行调用, 便能够在图像上绘制出来相应的图形, 我们以图像绘制为例, ...
- 《LabVIEW 虚拟仪器程序设计从入门到精通(第二版)》一1.3 小结
本节书摘来自异步社区<LabVIEW 虚拟仪器程序设计从入门到精通(第二版)>一书中的第1章,第1.3节,作者 林静 , 林振宇 , 郑福仁,更多章节内容可以访问云栖社区"异步社 ...
- 将不确定变成确定~LINQ DBML模型可以对应多个数据库吗
答案是肯定的,一个DBML模型可以对应多个数据库,只要数据库中的表与模型中定义的表结构完成相同,就可以这个技术,我们可以用来开发一些通用的功能模块,如通过后台管理模块,我们将一些通用表进行抽象,如,对 ...
- 数学--数论--HDU 2197 本原串 (推规律)
由0和1组成的串中,不能表示为由几个相同的较小的串连接成的串,称为本原串,有多少个长为n(n<=100000000)的本原串? 答案mod2008. 例如,100100不是本原串,因为他是由两个 ...
- POJ Building a Space Station 最小生成树
Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 15664 Accepted: 6865 Description You ...
- python(内置高阶函数)
1.高阶函数介绍: 一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),如果满足其一,则为高阶函数. 常见的高阶函数:map().sorted( ...
- unittest(封装用例)
from selenium import webdriver from time import sleep import unittest #导入unittest库 import HTMLTestRu ...
- CentOS启用iptables防火墙
centos 7默认的防火墙使用firewall,系统服务管理方式也变更了,可以通过systemctl命令控制. 可以参考这个链接 但是习惯用iptables,可以按下面的操作改下 1.关闭firew ...