CSDN博客

img zhouxqwh

玛丽莲小姐问题

发表于2008/10/1 14:57:00  347人阅读

桌面上有三个盒子,其中一个里面有手机,而另外两个是空的.主持人首先让你选择一个,然后她去打开剩下的一个空的盒子,然后他问你要不要和最后剩下的那个盒子交换,请写个程序证明是换好还是不换好!

答案是换。  
当主持人去掉一个错误答案后,如果不换,那么开始选对就选对了,没选对就没选对,主持人的行为对你没有任何影响,所以选对的概率是1/3如果换,那么如果开始选对,现在就错了,如果开始选错,现在就对了。也就是说,如果开始选错了,那么结果就能选对。因为空盒子有2个,选错的概率是2/3,也就是说,最后选对的概率是2/3 

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.     int   i,b,c;  
  6.     int   a[3];  
  7.     int   change=0;  
  8.     int   nochange=0;  
  9.     for(i=0;i<1000000;i++)  
  10.     {  
  11.         a[0]=0;  
  12.         a[1]=0;  
  13.         a[2]=0;  
  14.         a[int(rand()%3)]=1;                                 //一个手机  
  15.         b=int(rand()%3);                                       //选择的一个  
  16.         while(1)  
  17.         {
  18.             c=int(rand()%3);  
  19.             if(c!=b&&a[c]==0)                               //主持人打开一个空的  
  20.                 break;  
  21.         }  
  22.         if(a[b]==1)   nochange++;                           //不换  
  23.         else change++;
  24.     }  
  25.     printf("change:%d/n",change);  
  26.     printf("nochange:%d/n",nochange);   
  27.     return 0;
  28. }
文章参考 http://blog.csdn.net/tvtvtvtv/archive/2006/11/22/1404642.aspx



0 0

相关博文

我的热门文章

img
取 消
img