[解答]一道引起全美大学生和很多军械学院人士举论坛辩论的逻辑题

原题:

假设你在进行一个游戏节目。现给三扇门供你选择:一扇门后面是一辆轿车,另两
扇门后面分别都是一头山羊。你的目的当然是要想得到比较值钱的轿车,但你却并
不能看到门后面的真实情况。主持人先让你作第一次选择。在你选择了一扇门后,
知道其余两扇门后面是什么的主持人,打开了另一扇门给你看,而且,当然,那里
有一头山羊。现在主持人告诉你,你还有一次选择的机会。那么,请你考虑一下,
你是坚持第一次的选择不变,还是改变第一次的选择,更有可能得到轿车?

《广场杂志》刊登出这个题目后,竟引起全美大学生的举国辩论,许多大学的教授
们也参与了进来。真可谓盛况空前。据《纽约时报》报道,这个问题也在中央情报
局的办公室内和波斯湾飞机驾驶员的营房里引起了争论,它还被麻省理工学院的数
学家们和新墨哥州洛斯阿拉莫斯实验室的计算机程序员们进行过分析。

现在,请你来回答一下这个问题。

偶的理解:

应该是换的概率大,从不得车的角度看:

第一次选择,不得车的概率是2/3.
在第二次选择中,
如果换,就会改变第一次不得车的命运,所以第二次换的话,也就是得车概率成了2/3.
如果不换的话,不得车的概率还是第一次的不得车概率2/3,也就是得车是1/3概率.

所以换是2/3得车,不换是1/3得车

 

论坛的讨论(军网):

http://23.104.219.35/bbs/ShowPost.asp?id=21126

计算机模拟:

1,

matlab程序,直接复制到matlab窗口就可以运行;
运行结果:

如果换得车概率:0.66657
如果不换得车概率:0.33343



cout=1000000; %选取次数
car_change=0; %换得车次数

car_unchange=0;%不换得车次数


open=rand(1,cout)./0.3333;%均匀分布的随机数,在0~1表示选中车
for i=1:cout
if open(i)<1 %如果选中车
car_unchange = car_unchange + 1; %不换则得车,
car_change =car_change + 0;%换则不得车
else %没选中车
car_unchange = car_unchange + 0; %不换则不得车
car_change =car_change + 1;%换则得车
end
end

disp(strcat('如果换得车概率:',num2str(car_change/cout)))

disp(strcat('如果不换得车概率:',num2str(car_unchange/cout)))

套用CCEZC的公式对比,完全吻合:


拓展到羊为n只的matlab模拟程序:
cout=20000;
n=10;
    l_change=zeros(1,n);
    l_unchange=zeros(1,n);
    car_change=zeros(1,n);

    car_unchange=zeros(1,n);
 
for k=2:n %k为羊的只数
%车总是放在第一个门
 open=rand(1,cout);%均匀分布的随机数,第一次选的门
 open2=rand(1,cout);%均匀分布的随机数,第二次选的门


 
    for i=1:cout
        door_open=ceil(open(i)*(k+1));%第一次选择的门
        door_open2=ceil(open2(i)*(k-1));%第二次选择的门,将主持人开的门和第一次所选的门放在最后面,重排门
                                         %则第二次选择范围为1~k-1
       
              
 
       
        if door_open==1   %如果选中车
            car_unchange(k) = car_unchange(k) + 1; %不换则得车
            car_change(k) =car_change(k) + 0;%换则不得车
        else   %没选中车
            car_unchange(k) = car_unchange(k) + 0; %不换则不得车
           
           
            %第二次换的门
           
           
            if door_open2==1%如果第二次换得车
                car_change(k) =car_change(k) + 1;%换则得车
           
            else %如果第二次换还不得车
                car_change(k) =car_change(k) + 0;%换也不得车
            end
           
           
        end
    end

    l_change(k)=car_change(k)/cout;
    %disp(strcat('如果换得车概率:',num2str(car_change(k)/cout)))
    l_unchange(k)=car_unchange(k)/cout;
    %disp(strcat('如果不换得车概率:',num2str(car_unchange(k)/cout)))
end
x=2:n;
p_change=x./(x+1)./(x-1);%推导公式,换得车概率

%画图

 

l_change_G=l_change(:,2:n); 
l_unchange_G=l_unchange(:,2:n);
p_change_G=p_change;

 

plot(2:n,l_change_G,':',2:n,l_unchange_G,2:n,p_change_G,'*')


       

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值