【三门问题】自写过程中遇到的种种记录,求个大大解释下期中问题的原理哇,拜谢
来源:互联网 发布:数据库脚本怎么写 编辑:程序博客网 时间:2024/06/06 09:33
今天上线意外发现自己某群里在讨论三门问题,大致是说微软出的一道面试题是这个,然后对2号门的概率是1/2还是2/3争论不休,于是我决定写个程序来试试,下面是他们说的原题:
假设有三道门,只有一道门后有奖励,其他两道后面都是煤团,只有主人知道哪道门后有奖励。你选择1号门。在打开门前,主人打开了3号门,发现后面是煤团。现在你有两个选择:一是继续坚持你选中的1号门,二是换为打开2号门,你会怎么选择?
换门。当你选择1号门时,有66%的机会奖品不在门后面。当主人打开门后,你所选的门后依然有66%的几率没有奖品。因此,你应换2号门,这样中奖的几率会翻一倍。这道题的关键是主人知道哪道门后有奖。
换门。当你选择1号门时,有66%的机会奖品不在门后面。当主人打开门后,你所选的门后依然有66%的几率没有奖品。因此,你应换2号门,这样中奖的几率会翻一倍。这道题的关键是主人知道哪道门后有奖。
为了让朋友能看懂特意用拼音写值的名称什么的了,
还是有问题,单步执行半天,最后在随机数那出问题了,单独拿出来测试这个随机数发现,问题出在srand()这句重置随机数的问题上,测试的时候每秒输入的值都是一样的,就输出好N多个1然后N个0然后N个2什么的,原因就在时间重置随机数这个问题上,删除就可以完全执行了。
#include<iostream>#include<ctime>using namespace std;int kai(int da,int xz);int timu(int a);int main(){int zx,a=0,gaici=0,yuanci=0,tc;cout<<"输入执行次数"<<endl;cin>>zx;for (int i=0;i<zx;a=timu(a)){if (a==1)gaici++;elseyuanci++;i++;}cout<<"改选为正确的次数"<<gaici<<"改选为正确的几率"<<gaici/zx<<endl<<"原选为正确的次数"<<yuanci<<"几率为"<<yuanci/zx<<endl;cout<<"输入任意值退出";cin>>tc;return 0;}int timu(int a){int daan,xuanze,gaixuan,o;srand((unsigned)time(NULL));daan=rand()%3+1;xuanze=rand()%3+1;if (xuanze==daan)o=2;elseo=1;{gaixuan=kai(daan,xuanze);if (gaixuan==daan)o=1;elseo=2;}return o;}int kai(int da,int xz){int k;if (da==1){if(xz==2)k=3;elsek=2;}else{if(xz==1){if(da==2)k=3;elsek=2;}elsek=1;}return k;}这段是错的从gaixuan=kai()往后都是逻辑错误 ,改成这样
#include<iostream>#include<ctime>using namespace std;int timu(int a);int main(){int zx,a=0,gaici=0,yuanci=0,tc;cout<<"输入执行次数(不能超过2的32次方)"<<endl;//第一行显示的cin>>zx;//输入重复多少遍for (int i=0;i<zx;a=timu(a))//重复题目{if (a==1)gaici++;//改正确的次数累加elseyuanci++;//原来正确的次数累加i++;}cout<<"改选为正确的次数"<<gaici<<"改选为正确的几率"<<gaici/(double)zx<<endl<<"原选为正确的次数"<<yuanci<<"几率为"<<yuanci/(double)zx<<endl;cout<<"输入任意值退出";cin>>tc;return 0;}int timu(int a)//这往下是题目{int daan,xuanze,o;srand(time(0));daan=rand()%3+1;//随机一个正确的答案xuanze=rand()%3+1;//随机最开始选择的数if (xuanze==daan)//如果选择的答案正确o=2;//返回上面重复题目里原来正确累加那记1次elseo=1;//返回上面重复题目里改选正确累加那记1次return o;}
还是有问题,单步执行半天,最后在随机数那出问题了,单独拿出来测试这个随机数发现,问题出在srand()这句重置随机数的问题上,测试的时候每秒输入的值都是一样的,就输出好N多个1然后N个0然后N个2什么的,原因就在时间重置随机数这个问题上,删除就可以完全执行了。
本来想int的范围是2的23次方自觉写个范围很好,结果是惨烈的,3 000 000 000的执行结果都是程序不见了,应该是崩溃了,单步执行出来几率那显示是负数就不截图,但是求来个大大解释下谢谢,已经心力交瘁不想动了,刚自学C++没多久,这问题弄了我一下午了。
0 0
- 【三门问题】自写过程中遇到的种种记录,求个大大解释下期中问题的原理哇,拜谢
- 工作过程中遇到的问题记录
- 记录开发过程中遇到的问题
- 蒙特利尔问题(三门问题)的解释
- Phonegap环境搭建中遇到的种种问题
- “三门问题”概率的C++程序解释
- 自写webrtc程序中遇到的问题---------------------持续更新----------
- 准备写论文,开个博客记录编程中遇到和解决的问题
- 记录的Android开发过程中遇到的问题。
- 写壳过程中遇到的问题总结
- 用mysql写存储过程中遇到的问题
- 记录研究SQLite过程中遇到的问题!
- 最近学习过程中遇到的问题,记录一下
- 记录一下android开发过程中遇到的问题
- chromedriver源码编译过程中遇到的问题记录
- 支付宝技术集成过程中遇到的问题记录
- ITK+VTK 混编学习过程中遇到的问题记录
- TeamCity使用过程中遇到的问题记录
- 3.1 坐标系简介
- javaSE学习笔记之几个关键字this、super、final、static
- 多线程(1)
- MyISAM 和 InnoDB 中索引使用的区别
- Myeclipse console日志最开始的日志无法查看的解决办法
- 【三门问题】自写过程中遇到的种种记录,求个大大解释下期中问题的原理哇,拜谢
- google推出的SwipeRefreshLayout下拉刷新用法
- 为什么匿名内部类中引用的局部变量和参数需要final而成员字段不用?
- 联网查看图片的Demo
- 写在准备找工作的日子里
- 《C++ 沉思录》阅读笔记——代理类
- Opengl编程遇到的问题以及解决
- POJ2226
- SQL语句的语法-Data Manipulation Statements