用C语言验证“三门定理”

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <time.h>// 一个源自博弈论的数学游戏问题:
// 参赛者会看见三扇门,
// 其中一扇门的里面有一辆汽车,
// 选中里面是汽车的那扇门,
// 就可以赢得该辆汽车,
// 另外两扇门里面则都是一只山羊。
// 当参赛者选定了一扇门,
// 主持人会开启另一扇是山羊的门;
// 并问:“要不要换一扇门?”
// 依照玛丽莲·沃斯·莎凡特的见解,参赛者应该换,
// 换门的话,赢得汽车的概率是2/3。
// 这问题亦被叫做蒙提霍尔悖论:
// 因为该问题的答案虽在逻辑上并无矛盾,
// 但十分违反直觉。// 验证3门定理
// 1. 先验证不换门的情况
// 2. 再验证换门的情况// 验证具体设计思路
// 1. 先创建一个10万次的循环实验;
// 2. 每个试验都有一个三个元素的数组;
// 3. 数组分别是两个0一个1;
// 4. 先随机交换3次数组;
// 5. 再随机选一个数组中的元素;
// 6. 此时,再分别检查另外两个数组,公布其中一个元素是0的数组;
// 7. 最后记录选中1的次数;
//void Swap(int *a, int *b)
{int iTmp = *a;*a = *b;*b = iTmp;
}bool GuessWithNoSwitch(void)
{// 1. 创建一个三个元素的数组static int arrInt[3] = { 0, 0, 1 };// 2. 先随机交换三个数组中元素的位置for (int iIdx = 0; iIdx < 3; ++iIdx){// 2.2 获取两个随机数(0~2的范围内)const int iRandom1 = rand() % 3;const int iRandom2 = rand() % 3;// 2.3 交换两个数组元素Swap(&arrInt[iRandom1], &arrInt[iRandom2]);}// 3. 随机选中一个数组元素const int iRandom3 = rand() % 3;if (0 == arrInt[(iRandom3 + 1) % 3]){// 3.1 公布此数组元素是0}else if (0 == arrInt[(iRandom3 + 2) % 3]){// 3.2 或者公布此数组元素是0}// 4. 检查是否选中1bool bCheck = false;if (1 == arrInt[iRandom3]){bCheck = true;}return bCheck;
}bool GuessWithSwitch(void)
{// 1. 创建一个三个元素的数组static int arrInt[3] = { 0, 0, 1 };// 2. 先随机交换三个数组中元素的位置for (int iIdx = 0; iIdx < 3; ++iIdx){// 2.2 获取两个随机数(0~2的范围内)const int iRandom1 = rand() % 3;const int iRandom2 = rand() % 3;// 2.3 交换两个数组元素Swap(&arrInt[iRandom1], &arrInt[iRandom2]);}// 3. 随机选中一个数组元素int iRandom3 = rand() % 3;if (0 == arrInt[(iRandom3 + 1) % 3]){// 3.1 公布此数组元素是0,并且切换选中的元素为下面的((iRandom3 + 2) % 3)iRandom3 = (iRandom3 + 2) % 3;}else if (0 == arrInt[(iRandom3 + 2) % 3]){// 3.2 或者公布此数组元素是0,并且切换选中的元素为上面的((iRandom3 + 1) % 3)iRandom3 = (iRandom3 + 1) % 3;}// 4. 检查是否选中1bool bCheck = false;if (1 == arrInt[iRandom3]){bCheck = true;}return bCheck;
}int main(int argc, char* argv[])
{// 1. 先设置伪随机数的种子srand((unsigned int)time(NULL));// 2. 打印交互语句printf("The first case: No witch choice!\n");// 3. 先设置最大选择次数(当前是十万次)const int iMaxCount = (int)1e5;// 4. 用于记录当前选中“数字1”的次数int iCntNoSwitch = 0;for (int iIdx = 0; iIdx < iMaxCount; ++iIdx){if (GuessWithNoSwitch()){++iCntNoSwitch;}}// 5. 计算第一种方式选中的“频率”const double dRatio1 = 1.0 * iCntNoSwitch / iMaxCount;printf("case 1 ratio: %lf\n", dRatio1);// 6. 打印交互语句printf("The second case: Witch choice!\n");// 7. 用于记录当前选中“数字1”的次数int iCntSwitch = 0;for (int iIdx = 0; iIdx < iMaxCount; ++iIdx){if (GuessWithSwitch()){++iCntSwitch;}}// 8. 计算第二种方式选中的“频率”const double dRatio2 = 1.0 * iCntSwitch / iMaxCount;printf("case 1 ratio: %lf\n", dRatio2);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/639873.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Shiro实战详解(4)--JWT生成token以及解析token

JWT生成token以及解析token 06 SpringbootShiroJwt前后端分离鉴权1、前后端分离会话问题【1】问题追踪【2】解决方案 2、JWT概述1.Header2.payload3.Signature JWT生成Token及解析 06 SpringbootShiroJwt前后端分离鉴权 1、前后端分离会话问题 【1】问题追踪 前面我们实现分…

【Linux驱动】休眠与唤醒 | POLL机制 | 异步通知 | 阻塞与非阻塞 | 软件定时器

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《Linux驱动》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 目录 &#x1f3d3;休眠与唤醒&#x1f3f8;内核函数&#x1f3f8;驱动框架及编程 &#x1f3d3;…

代码随想录算法训练DAY25|回溯2

算法训练DAY25|回溯2 216.组合总和III 力扣题目链接 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数&#xff0c;并且每种组合中不存在重复的数字。 说明&#xff1a; 所有数字都是正整数。 解集不能包含重复的组合。 示例 1: 输入: k 3, n …

本地部署轻量级web开发框架Flask并实现无公网ip远程访问开发界面

文章目录 1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 本篇文章主要讲解如何在本地安装Flask&#xff0c;以及如何将其web界面发布到公网进行远程访问。 Flask是目前十分流行的web框架&#xff0c;采用Python编程语…

Linux操作系统——理解软硬链接

1.引言 通过我们前面理解文件系统的基础上&#xff0c;我们来理解软硬链接&#xff0c;在我们学习文件的时候我们会见到各种链接文件&#xff0c;其中链接文件分为两种&#xff0c;一种叫软连接&#xff0c;一种叫硬链接。 下面我们新建一个log文件&#xff0c;要对log这个文…

【SpringCloud Alibaba】 介绍及微服务模块搭建

文章目录 SpringCloud Alibaba 介绍主要功能组件 微服务环境搭建案例准备技术选型模块设计微服务调用 创建父工程创建基础模块1、创建 shop-common 模块2、创建实体类 创建用户微服务1、创建pom.xml2、编写主类3、创建配置文件 创建商品微服务1、创建一个名为 shop-product 的模…

理解PCIE设备透传

PCIE设备透传解决的是使虚拟机直接访问PCIE设备的技术&#xff0c;通常情况下&#xff0c;为了使虚拟机能够访问Hypervisor上的资源&#xff0c;QEMU&#xff0c;KVMTOOL等虚拟机工具提供了"trap and emulate"&#xff0c; Virtio半虚拟化等机制实现。但是这些实现都…

leetcode 151反转字符串如何原地去除多余空格

题目&#xff1a;https://leetcode.cn/problems/reverse-words-in-a-string/description/ 完整题解:https://leetcode.cn/problems/reverse-words-in-a-string/solutions/2611893/chu-li-kong-ge-ku-han-shu-reversefan-zhu-bioo 思路来自代码随想录&#xff0c;对其中的除去多…

websocket实现聊天室(vue2 + node)

通过websocket实现简单的聊天室功能 需求分析如图&#xff1a; 搭建的项目结构如图&#xff1a; 前端步骤&#xff1a; vue create socket_demo (创建项目)views下面建立Home , Login组件路由里面配置路径Home组件内部开启websocket连接 前端相关组件代码&#xff1a; Login…

【操作系统】实验二 Proc文件系统

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

Docker基础使用

Docker基础使用 1.查看容器挂载文件夹一定要放开权限&#xff0c;否则后面启动nexus时会无法启动1.查询远程镜像重启docker服务容器自启动关闭容器自启动查看docker容器是否挂载容器挂载解释保存和加载本地镜像创建mysql容器容器转换为镜像创建dockerfile容器相互通讯查看容器的…

使用Rancher管理Kubernetes集群

部署前规划 整个部署包括2个部分&#xff0c;一是管理集群部署&#xff0c;二是k8s集群部署。管理集群功能主要提供web界面方式管理k8s集群。正常情况&#xff0c;管理集群3个节点即可&#xff0c;k8s集群至少3个。本文以3节点管理集群&#xff0c;3节点k8s集群为例 说明部署过…

vivado JTAG链、连接、IP关联规则

JTAG链 这列出了定义板上可用的不同JTAG链。每个链都列在下面<jtag_chain>以及链的名称&#xff0c;以及定义名称和链中组件的位置&#xff1a; <jtag_chains> <jtag_chain name"chain1"> <position name"0" component"part0…

ELK 分离式日志(1)

目录 一.ELK组件 ElasticSearch&#xff1a; Kiabana&#xff1a; Logstash&#xff1a; 可以添加的其它组件&#xff1a; ELK 的工作原理&#xff1a; 二.部署ELK 节点都设置Java环境: 每台都可以部署 Elasticsearch 软件&#xff1a; 修改elasticsearch主配置文件&…

计算机视觉工程师就业前景如何?

计算机视觉作为一门快速发展的技术领域&#xff0c;其就业前景非常广阔。以下是对计算机视觉就业前景的分析&#xff1a; 市场规模&#xff1a;计算机视觉行业的市场规模正在持续扩大。根据行业分析报告&#xff0c;预计全球计算机视觉市场规模将在2025年达到530亿美元&#xf…

【Web实操10】定位实操_图片上面定位文字

参考实现的效果是这样的&#xff1a; 目前还没有学到渐变色&#xff0c;所以标签效果的渐变色没有实现&#xff0c;只是利用radius设置了圆角图形&#xff0c;辅之以背景色和设置其中文本文字的颜色和居中对齐。 在自己写的过程中&#xff0c;对于标签的定位写成了相对定位&a…

RabbitMQ的安装使用

RabbitMQ是什么&#xff1f; MQ全称为Message Queue&#xff0c;消息队列&#xff0c;在程序之间发送消息来通信&#xff0c;而不是通过彼此调用通信。 RabbitMQ 主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时&#xff0c;消费者无法快速消费&#xff0c;…

Webpack5入门到原理22:提升打包构建速度

HotModuleReplacement 为什么 开发时我们修改了其中一个模块代码&#xff0c;Webpack 默认会将所有模块全部重新打包编译&#xff0c;速度很慢。 所以我们需要做到修改某个模块代码&#xff0c;就只有这个模块代码需要重新打包编译&#xff0c;其他模块不变&#xff0c;这样…

kafka入门(九):副本

副本 副本&#xff08;Replica&#xff09;&#xff0c;指的是分布式系统对数据和服务提供的一种冗余方式。 Kafka通过多副本机制实现故障自动转移&#xff0c;在Kafka集群中某个broker节点失效的情况下仍然保证服务可用。 kafka 副本之间是 一主多从的关系。 其中 leader 副…

打开json文件,读取里边的每一行数据,每一行数据是一个字典,使用matplotlib画图

这段代码的目的是读取 JSON 文件&#xff0c;提取关键信息&#xff0c;然后使用 Matplotlib 绘制四个子图&#xff0c;分别显示不同的指标随着 iter 变化的情况。这种图形化分析有助于直观地了解模型的性能。 画图结果如下&#xff1a; json文件格式如下&#xff1a;下面只粘贴…