用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;
}
相关文章:
用C语言验证“三门定理”
#include <stdio.h> #include <stdbool.h> #include <stdlib.h> #include <time.h>// 一个源自博弈论的数学游戏问题: // 参赛者会看见三扇门, // 其中一扇门的里面有一辆汽车, // 选中里面是汽车的那扇门࿰…...

计算机网络-分层结构,协议,接口,服务
文章目录 总览为什么要分层怎样分层正式认识分层概念小结 总览 为什么要分层 发送文件前要做的准备工作很多 把这个准备工作分层小问题解决,也就分层解决 怎样分层 每层相互独立,每层做的工作不同 界面自然清晰,层与层之间的接口能够体现…...
前端开发 2: CSS
在前端开发中,CSS(层叠样式表)是一种用于描述网页样式的语言。它控制着网页的布局、颜色、字体等外观效果。在本篇博客中,我将为你介绍 CSS 的基础知识和常用技巧,帮助你更好地掌握前端开发中的样式设计。 CSS 基础知…...

嵌入式-Stm32-江科大基于标准库的GPIO4个小实验
文章目录 一 、硬件介绍二 、实验:LED闪烁、LED流水灯、蜂鸣器提示2.1 需求1:面包板上的LED以1s为周期进行闪烁。亮0.5s,灭0.5s.....2.2 需求2: 8个LED实现流水灯2.3 需求3:蜂鸣器不断地发出滴滴、滴滴.....的提示音。蜂鸣器低电平触发。 三、…...

HackTheBox - Medium - Linux - Noter
Noter Noter 是一种中型 Linux 机器,其特点是利用了 Python Flask 应用程序,该应用程序使用易受远程代码执行影响的“节点”模块。由于“MySQL”守护进程以用户“root”身份运行,因此可以通过利用“MySQL”的用户定义函数来利用它来获得RCE并…...

Uniapp多选Popup(弹出层)
uniapp中多选组件很少,故个人简单开发了一个,可简单使用,也可根据个人需求稍微改进 支持的功能 单选多选(默认)限制选择数量默认选中禁用选项 属性说明 属性默认值说明singlefalsetrue为开启单选,否则为…...

什么是网络安全?网络安全概况
网络安全涉及保护我们的计算机网络、设备和数据免受未经授权的访问或破坏。 这个领域包括多种技术、过程和控制措施,旨在保护网络、设备和数据免受攻击、损害或未授权访问。网络安全涉及多个方面,包括但不限于信息安全、应用程序安全、操作系统安全等 …...

c语言小游戏之扫雷
目录 一:游戏设计理念及思路 二:初步规划的游戏界面 三:开始扫雷游戏的实现 注:1.创建三个文件,test.c用来测试整个游戏的运行,game.c用来实现扫雷游戏的主体,game.h用来函数声明和包含头文…...

如何本地安装Python Flask并结合内网穿透实现远程开发
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

在线App封装技术:HTML5的新生命
HTML5封装的魅力所在HTML5带来了丰富的多媒体功能、地理位置服务、离线存储等特性,使得Web应用的体验更加接近原生App。封装HTML5到App中,可以大大缩短开发周期,降低开发成本,并且一次编写,多平台运行,极大…...

Spring Boot 4.0:构建云原生Java应用的前沿工具
目录 前言 Spring Boot简介 Spring Boot 的新特性 1. 支持JDK 17 2. 集成云原生组件 3. 响应式编程支持 4. 更强大的安全性 5. 更简化的配置 Spring Boot 的应用场景 1. 云原生应用开发 2. 响应式应用程序 3. 安全性要求高的应用 4. JDK 17的应用 总结 作…...

Debian系统写Mysql时中文出现乱码无法定入的问题解决方案
原因是操作系统可能精简安装,没有GBK字符集,只有UTF8在转换或使用的时候有问题。 使用locale -a查看系统支持的字符集。正常的比较全的字符集的操作系统如下: 有问题的操作系统字符集如下: 解决方案: 步骤1&#…...

CPMS靶场练习
关键:找到文件上传点,分析对方验证的手段 首先查看前端发现没有任何上传的位置,找到网站的后台,通过弱口令admin 123456可以进入 通过查看网站内容发现只有文章列表可以进行文件上传;有两个图片上传点 图片验证很严格…...

CTFhub-bak文件
CTFhub-Web-信息泄露-备份文件下载-bak文件 题目信息 解题过程 看到提示说和index.php有关,在url后面加index.php.bak,跳转到http://challenge-7a4da2076cfabae6.sandbox.ctfhub.com:10800/index.php.bak网址,即: 跳转到下载页…...

本地部署轻量级web开发框架Flask并实现无公网ip远程访问开发界面
文章目录 1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 本篇文章主要讲解如何在本地安装Flask,以及如何将其web界面发布到公网进行远程访问。 Flask是目前十分流行的web框架,采用Python编程语…...
面试题-MySQL如何定位慢查询
慢查询出现的情况就这些:聚合查询、多表查询、表数据量过大查询、深度分页查询。 表象:页面加载过慢、接口压测响应时间过长(超过1S)。 假如你的业务接口就是比较慢,你怎么知道是SQL的问题呢?就算是SQL的…...
【C++PCL】点云处理K-Means点云分割
目录 1.原理介绍 2.代码效果 3.源码展示 4.参数调试 5.注意事项...

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

hanlp,pkuseg,jieba,cutword分词实践
总结:只有jieba,cutword,baidu lac成功将色盲色弱成功分对,这两个库字典应该是最全的 hanlp[持续更新中] https://github.com/hankcs/HanLP/blob/doc-zh/plugins/hanlp_demo/hanlp_demo/zh/tok_stl.ipynb import hanlp # hanlp.pretrained.tok.ALL # 语种见名称最…...
一个简单的Vue实例
Vue.js 是一个流行的 JavaScript 框架,用于构建交互式的网页应用。一个基本的 Vue 实例包含数据对象、模板、挂载点、方法和生命周期钩子等。 以下是一个简单的 Vue 实例示例: // 创建一个新的 Vue 实例 var app new Vue({el: #app, // 指定一个挂载点…...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...

YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...

页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...