14

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


基本上有3张卡:

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

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

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


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

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


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

4

6 回答 6

8

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

当您随机抽取一张牌并将其放在桌子上时,可能会发生六种同样可能的事情:

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

在这 6 个事件中,6 个事件中有 3 个导致桌面上出现一张黑面朝上的牌。

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

因此,“另一边也是黑色的概率是多少?”这个问题的答案是什么?是2/3

您的算法失败了,因为您仅将出现的black_black卡片计算为单个事件,而实际上它是两个。

于 2009-12-15T20:04:45.007 回答
7

你的算法缺少一个关键步骤:把牌放在桌子上。如果你抽到黑红牌,并不能保证当你放下它时,黑色的一面是显露出来的。添加一个额外的步骤来模拟随机选择每张卡片的一侧,然后确定有多少案例显示为黑色,然后确定其中有多少案例显示了黑黑卡片。

于 2009-12-15T20:00:39.977 回答
4

卡片有六个面,我们假设它们出现的概率相等。一共有三张黑脸,其中两张的另一边是黑的。我们丢弃所有红脸在最上面的情况,所以我们只关心三个等概率的黑脸。

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

于 2009-12-15T20:02:36.590 回答
0

我认为你需要考虑红黑牌被抽的两种可能性:红面朝上和黑面朝上。这些概率的总和就是抽到红黑牌的概率。

于 2009-12-15T20:02:10.177 回答
0

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

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

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

于 2009-12-15T20:23:56.997 回答
0

两边都是红色的牌基本上(原谅双关语)是一条红鲱鱼——不管怎么处理,它都会变成红色,我们不需要再关心它了。

只剩下红/黑和黑/黑卡。同样,如果红色/黑色被处理为红色面朝上,我们无需进一步关注。剩下的可能性是:

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

于 2009-12-15T21:40:45.653 回答