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

时间:2009-12-15 19:55:25

标签: java algorithm probability

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


基本上有3张牌:

  • 双面黑色
  • 双面红色
  • 一边是黑色,另一边是红色

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

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


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

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


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

6 个答案:

答案 0 :(得分:8)

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

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

  1. 您选择R / R卡并将其面朝上放置。
  2. 您选择R / R卡并将另一面朝上放置。
  3. 您选择B / R卡并将其黑色朝上放置。
  4. 您选择B / R卡并将其面朝上放置。
  5. 您选择B / B卡并将其黑色面朝上。
  6. 您选择B / B卡并将另一张黑方面朝上。
  7. 在这6个事件中,6个中有3个导致桌面上出现黑边卡。

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

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

    您的算法失败了,因为您只将black_black卡计为单个事件,实际上是两个。

答案 1 :(得分:7)

您的算法缺少关键步骤:将卡放在桌面上。如果您绘制黑红卡,则无法保证在您放下黑色时显示黑色边。添加一个额外的步骤来模拟随机选择每张卡片的一侧,然后确定有多少个案例显示黑脸,然后有多少那些案例显示黑黑卡片。

答案 2 :(得分:4)

卡片有六面,我们假设它们具有相同的概率。有三个黑色面孔,另外两个黑色面孔。我们抛弃所有红脸最重的情况,所以我们只关注三张黑色面孔,概率相等。

因此,另一面是黑色的概率实际上是2/3。

答案 3 :(得分:0)

我认为你需要考虑红黑卡的两种可能性:红色面朝上和黑面朝上。这些概率的总和将是完全绘制红黑卡的概率。

答案 4 :(得分:0)

可能有助于检查您已正确实施的问题:假设您已经随机选择了至少一侧为黑色的卡片,那么该卡片在一侧是黑色而在另一侧是红色的几率是多少?

你没有正确实现的问题是:假设你正在看这张脸上是黑色的卡片,那么另一张脸上的红色是多少?

请注意,有两张黑卡,但有三张黑脸。

答案 5 :(得分:0)

双面红色的牌基本上是(原谅双关语)一个红色的鲱鱼 - 无论如何处理,它都会变红,我们不再需要关心它了。

只留下红/黑和黑/黑卡。再次,如果红色/黑色红色朝上,我们需要不再付费。剩下的可能性是:

  1. 红色/黑色,黑色
  2. 黑色/黑色,第一面朝上
  3. 黑色/黑色,第二面朝上< / LI>
由于这三个中的两个有另一边是黑色,概率是三分之二。