蒙蒂霍尔悖论 - 随机生成的数字与前两个不同

Posted

技术标签:

【中文标题】蒙蒂霍尔悖论 - 随机生成的数字与前两个不同【英文标题】:Monty Hall paradox - randomly generated number different from the previous two 【发布时间】:2014-04-03 11:12:23 【问题描述】:

我正在编写一个脚本来在 MATLAB 中证明蒙蒂霍尔悖论,但我遇到了一个问题 - 不知道怎么让MATLAB生成一个和前面两个不同的1到3之间的随机数。

这是我的脚本:

% This program demostrates the Monty Hall paradox.
% A_pick1 represents where person chooses to put the five-pound note
% B_pick1 represents which box person B  first identifies
% A_pick2 represents the box that person A opens up - it must be different
% than both A_pick1 and B_pick2

A_pick1 = round(3 * rand(1) + 0.5)
B_pick1 = round(3 * rand(1) + 0.5)
A_pick2 = round(3* rand(1) + 0.5);
while (A_pick2 == A_pick1 || A_pick2 == B_pick1)
   A_pick2 = rand(3 * rand(1) + 0.5) ~= (A_pick1 && B_pick1)
    break
end

我不确定如何正确使用 while 循环。

提前致谢

【问题讨论】:

【参考方案1】:

使用randisetxor 怎么样?

A_pick1 = randi(3);
B_pick1 = randi(3);

x = setxor(1:3,[A_pick1, B_pick1]);
A_pick2 = x(randi(numel(x)));

如果你有统计工具箱,还有其他选择,但我相信这应该做得很好。

祝你好运!

【讨论】:

【参考方案2】:

试试

A_pick1 = round(3.0 * rand(1.0) + 0.5)

这样你就可以确保双倍。 也许你想初始化你的随机数生成器rng,就像在rng('shuffle');中一样

【讨论】:

【参考方案3】:
while (A_pick2 == A_pick1 || A_pick2 == B_pick1)
   A_pick2 = rand(3 * rand(1) + 0.5);
end

【讨论】:

以上是关于蒙蒂霍尔悖论 - 随机生成的数字与前两个不同的主要内容,如果未能解决你的问题,请参考以下文章

三门问题(Monty Hall problem)的代码模拟

Arduino KY-024线性磁力霍尔传感器

基础之快速排序(霍尔排序)

霍尔分区不起作用?

蒙提霍尔问题简单粗暴的理解掉

「雕爷学编程」Arduino动手做(12)——霍尔磁力模块