实现简单算法(计算概率)

2022-09-04 02:19:47

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


基本上有3张牌:

  • 两面均为黑色
  • 两面都呈红色
  • 一边是黑色,另一边是红色

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

使用Java实现一个程序并尝试发现概率,该程序应该大量模拟卡的欺骗,并且应该输出卡的另一面是黑色的概率(它通过计算另一面也是黑色的次数来做到这一点)。


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

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


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


答案 1

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

当你抽出一张随机的牌并将其放在桌子上时,有六件同样可能的事情可能发生:

  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


答案 2

你的算法缺少一个关键步骤:把牌放在桌子上。如果您抽出黑红色的卡片,则无法保证放下时黑色的一面会显示出来。添加一个附加步骤来模拟随机选择每张卡片的一面,然后确定有多少个案例显示黑脸,然后确定其中有多少个案例显示黑黑卡片。