换还是不换,这是一个问题

概率题:

给你三个盒子,其中一个放了东西,你指定一个,然后打开另外两个中的一个,发现是空的,问:你是否要改变你的选择。

网上的答案说应该改变选择,这样概率更大些。

那么请问,在发现另外一个盒子为空的情况下,选择的盒子中有东西的概率P是多少?改变后选对的概率又是多少【当然是1-P】?

我觉得用不着换,概率当然都是1/2。

我编写了一个程序模拟这个问题。这个程序显示invalidcountselcount misscount各占1/3,即selcount ~ misscount,证明了我的判断。

#include  <stdlib.h>
#include  <time.h>
#include  <iostream>
int  thatbox;  //  有东西的盒子,值可以为 0 ,1,2
int  selbox;  //  选中的盒子,值可以 0 ,1,2
int  voidbox;  //  空盒子,值可以为 0,1,2,但肯定和selbox不一样。
int  invalidcount = 0;  //  不符合条件的试验次数。即空盒子里面有东西。
int  selcount = 0;  //  选中的盒子里面有东西的次数。
int  misscount = 0;  //  剩下的那个盒子里面有东西的次数。
void  change_or_not_problem()
{
          //  把东西随机放入一个盒子
        thatbox = rand()%3;
          //  选择一个盒子
        selbox = rand()%3;
          //  挑选一个盒子打开
        voidbox = (selbox + 1 + rand()%2)%3;
          //  如果打开的盒子有东西,那么这次试验无效
          if  (voidbox == thatbox)
        {
                ++invalidcount;
                  return  ;
        }
          if  (selbox == thatbox)
                ++selcount;
          else
                ++misscount;
}
int  main () {
          using   namespace  std;
        srand(time(  nullptr  ));
          for  ( int  i=0; i<10000; ++i)
                change_or_not_problem();
        cout <<  "selected count = "  << selcount << endl;
        cout <<  "miss count = "  << misscount << endl;
        cout <<  "invalid count = "  << invalidcount << endl;
          return  0;
}

把change_or_not改成下面的代码,就发现selCount约为1/3了。

void  change_or_not_problem()
{
	//  把东西随机放入一个盒子
	thatbox = rand() % 3;
	//  选择一个盒子
	selbox = rand() % 3;
	//  挑选一个盒子打开
	int x = rand() % 2;
	voidbox = (selbox + 1 + x) % 3;
	//  如果打开的盒子有东西,那么这次试验无效
	if (voidbox == thatbox)
	{
		voidbox = (selbox + 1 + (1 - x)) % 3;
	}
	if (selbox == thatbox)
		++selcount;
	else
		++misscount;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值