砸金蛋问题

最近有个朋友问我一个问题:你参加一个砸金蛋的电视节目,从三个蛋中选择了一个,主持人在剩下的两个蛋中选择了一个并砸开,发现里面没有奖品,问此时你是否应该交换蛋来提高自己的中奖率。

有些人会想,现在剩下两个蛋,其中一个有奖品,无论选择哪个,中奖率都是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,所以无须交换。

限于作者水平有限,以上都为本人愚见,若有不正,还望指出。同时感谢小芳芳同学的支持,给本文不少帮助!转载请注明出处,谢谢!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值