用c语言验证经典概率学悖论----三门问题

三门问题网上已经有很多解释了,笔者这里给一个非常简单的证明方式。

在你选择一扇门后,概率确定是三分之一。这时外面无论发生什么事你都认定这扇门不改变,那猜中正确门的概率仍然是三分之一。
这时候有个人就硬要打开除了你选择的门以外的一扇错误门,那他这个行为是必然的,他肯定能打开一个错误门,就像明天太阳会升起一样,他打开他的门,明天太阳升起就继续升起,跟你选的门正确与否没一毛钱关系。
此时可以发现,你选择的门正确概率没发生改变仍然是三分之一。

那么此时你要是换到没被你选择和没被那个人打开的门,它的概率就会是三分之二。

接下来就是c语言验证,笔者是在单片机上面跑的,试了好几个数字,发现循环次数只要小于317,函数返回0,如果大于等于317,函数就会返回1,可能单片机的随机有点不随机吧。。。下面是代码:


//i是随机选的门,j是随机正确的门, k是排除的门, m是最终选的门, a是选正确的次数, b是总次数
unsigned char xxx(){
	int b;
	int a;
	float result;
	for(b=0; b<317; b++){
	unsigned char i = rand()%3;
	unsigned char j = rand()%3;
	unsigned char k, m;
	while(1){
		k = rand()%3;
		if(k != i && k != j)
			break;
	}
	if(0 != i && 0 != k)
		m = 0;
	else if(1 != i && 1 != k)
		m = 1;
	else
		m = 2;
	if(m == j)
		a++;
	}
	result = (float)a/(float)b;
	if(result > 0.66 && result < 0.67)
		return 1;
	else
		return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值