实现一个简单的算法(计算概率)

Jam*_*mes 14 java algorithm probability

我被要求(作为家庭作业的一部分)设计一个执行以下操作的Java程序:


基本上有3张牌:

  • 两侧都是黑色
  • 两侧都是红色
  • 一边是黑色,另一边是红色

现在,如果我随机拿一张卡片放在桌子上.朝上的一面是黑色的.对方也是黑色的概率是多少?

使用Java实现程序并尝试发现概率,程序应该多次模拟卡片技巧并且应该输出卡片另一侧是黑色的概率(它通过计算另一侧的数量来做到这一点)也是黑色).


但是我被告知我的代码是错误的(算法明智的)......显然答案不应该是0.50.我试图理解算法时犯了错误吗?

有人能指出我正确的方向吗?(我不是要求你为我提供一个完全正常的实现,只是关于算法应该如何工作).


这篇文章非常有用:https://blog.codinghorror.com/finishing-the-game/

mat*_*t b 8

这可能对算法没有帮助,但这就是我自己得出答案的方法:

当您绘制随机卡并将其放在桌面上时,可能会发生六种可能发生的事情:

  1. 您选择R/R卡并将其面朝上放置.
  2. 您选择R/R卡并将另一面朝上放置.
  3. 您选择B/R卡并将其黑色朝上放置.
  4. 您选择B/R卡并将其红色朝上放置.
  5. 您选择B/B卡并将其黑色朝上放置.
  6. 您选择B/B卡并将另一个黑面朝上放置.

在这六个事件中,6个中有3个导致桌面上出现黑边卡.

在这3个事件中,恰好其中两个事件是卡黑的另一面.

因此,问题的答案是"对方也是黑色的概率是多少?" 是2/3.

您的算法失败是因为您只计算black_black出现为单个事件的卡,而实际上是两个.


JSB*_*ոգչ 7

您的算法缺少关键步骤:将卡放在桌面上.如果您绘制黑红卡,则无法保证在您放下黑色时显示黑色边.增加一个额外的步骤,以模拟随机选择每个卡片的侧面中的一个,然后确定如何许多情况下显示黑色面,然后多少的那些情况下,具有黑黑卡展示.

  • 至于为什么你现在得到3/4 - 你的代码假定给出一个黑色的面朝上,另一边的可能性是红色或黑色是均匀的 - 但事实并非如此!这正是你想要计算的!我建议完全采用不同的方法,让你的代码模拟所有可能的事件(不仅仅是黑方面的事件)并计算给定事件的几率. (2认同)