最近有个朋友问我一个问题:你参加一个砸金蛋的电视节目,从三个蛋中选择了一个,主持人在剩下的两个蛋中选择了一个并砸开,发现里面没有奖品,问此时你是否应该交换蛋来提高自己的中奖率。
有些人会想,现在剩下两个蛋,其中一个有奖品,无论选择哪个,中奖率都是1/2,所以换不换无所谓。我个人认为,这种想法对又不对。要看主持人知不知道奖品在哪个蛋中。
首先我们先来假设主持人知道奖品在哪个蛋中,他在选择砸蛋的时候一定会选择空蛋,这时候和“系统排除一个错误答案”异曲同工。那么这个问题就成了一个经典的砸蛋问题。概率问题最直观且精准的方法莫过于直接做实验了,为了叙述方便,我们假设做300次试验,三个蛋分别为A、B和C。不失一般性,奖品在A、B和C蛋中的个数都为100。
且随机正好选中有奖蛋的样本数为100(因为中奖概率为1/3嘛),此时如果不交换,仍然保持最初意见,那么你的中奖概率为1/3,而如果交换后,中奖概率提升至2/3。显然在这种情况下,交换是正确的选择,在交换蛋之后能显著提高中奖率。
这种情况下的模拟实验代码网上都有,属于经典问题,也就不再赘述(懒)。
接下来我们讨论另一种情况,即主持人不知道奖品在哪个蛋中,也就是说他在砸蛋的时候也许会敲出奖品来(我相信大多数情况都属于此类)。那么在这种情况下,交换蛋是否有意义呢。同样来模拟300次试验,首先选中有奖蛋的样本数一样为100组,不同的是主持人在敲蛋时可能会选择到有奖蛋,那么此类情况应该被排除(计算的是条件概率)。在没有选中有奖蛋的200个样本中主持人敲到有奖蛋的概率为1/2,即有一半的样本会被排除掉,有效实验样本数为100,与选中有奖蛋相同,此时交换与不交换的中奖概率都为1/2,所以交换也就没有意义。
模拟实验代码如下:
#include <iostream>
#include <time.h>
using namespace std;
const int testNum=1000; //实验次数
//问题:有3个金蛋,其中一个有奖品,你选择了一个,主持人在剩下的两个蛋中选择了一个并砸掉,发现里面没有奖品,那么为了提高获奖率,你是否应该选择交换蛋?
//在本实验中,假设主持人不知道那个蛋中有奖品,也就是说主持人砸掉的蛋中可能有奖品,此时,不作为正常样本计数,统计不换的时候中奖次数。
//如下:
int main(){
int goldEgg[3]={0,0,0};
int lucky=0;
int validTest=0;
srand((unsigned)time(NULL)); //播种,每次随机数不同
for(int i=0;i<testNum;i++){
int count=-1;
int selectedEgg=rand()%3; //选择的蛋
int luckyEgg=rand()%3; //中奖的蛋
int broken=rand()%2; //被砸掉的蛋
for(int i=0;i<=broken;i++){
count++;
if(count==selectedEgg){
count++;
}
}
int brokenEgg=count; //此为被砸掉蛋的编号
if(luckyEgg==brokenEgg){ //如果被砸掉的蛋中有奖品,不作为正常样本计数
continue;
}
else{
validTest++;
cout<<"本次有奖蛋为"<<luckyEgg+1<<"号蛋,你选择的为"<<selectedEgg+1<<"号蛋。"<<"砸掉的蛋为"<<brokenEgg+1<<"号蛋。";
if(luckyEgg==selectedEgg)
{
lucky++;
cout<<"恭喜您中奖了!"<<endl;
}
else{
cout<<"抱歉您没有中奖!"<<endl;
}
}
}
cout<<"总计抽奖次数为"<<testNum<<"次,其中有效次数为"<<validTest<<"次,在不换的情况下,中奖次数为"<<lucky<<"次"<<endl;
system("pause");
}
输出结果为:
总结一下,是否需要交换蛋需要看主持人是否知道奖品在哪个蛋中,如果知道,则交换蛋为正确选择,能提高中奖率;如果不知道,主持人都有可能自己砸出有奖蛋,那么在支持人没有砸到空蛋的情况下,交不交换的中奖率都为1/2,所以无须交换。
限于作者水平有限,以上都为本人愚见,若有不正,还望指出。同时感谢小芳芳同学的支持,给本文不少帮助!转载请注明出处,谢谢!