桌面上有三个盒子,其中一个里面有手机,而另外两个是空的.主持人首先让你选择一个,然后她去打开剩下的一个空的盒子,然后他问你要不要和最后剩下的那个盒子交换,请写个程序证明是换好还是不换好!
答案是换。
答案是换。
当主持人去掉一个错误答案后,
如果不换,那么开始选对就选对了,没选对就没选对,主持人的行为对你没有任何影响,所以选对的概率是
1/3
。
如果换,那么如果开始选对,现在就错了,如果开始选错,现在就对了。也就是说,如果开始选错了,那么结果就能选对。因为空盒子有
2
个,选错的概率是
2/3
,也就是说,最后选对的概率是
2/3
。
文章参考 http://blog.youkuaiyun.com/tvtvtvtv/archive/2006/11/22/1404642.aspx
- #include <iostream>
- using namespace std;
- int main()
- {
- int i,b,c;
- int a[3];
- int change=0;
- int nochange=0;
- for(i=0;i<1000000;i++)
- {
- a[0]=0;
- a[1]=0;
- a[2]=0;
- a[int(rand()%3)]=1; //一个手机
- b=int(rand()%3); //选择的一个
- while(1)
- {
- c=int(rand()%3);
- if(c!=b&&a[c]==0) //主持人打开一个空的
- break;
- }
- if(a[b]==1) nochange++; //不换
- else change++;
- }
- printf("change:%d/n",change);
- printf("nochange:%d/n",nochange);
- return 0;
- }