有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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


基本上有3张卡片:

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

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

使用Java实现一个程序,并尝试发现概率,该程序应大量模拟卡片技巧,并应输出卡片另一侧为黑色的概率(通过计算另一侧为黑色的次数来实现)


然而,有人告诉我,我的代码是错误的(算法方面)。。。显然,答案不应该是0.50。我在试图理解算法时犯了错误吗

谁能给我指一下正确的方向吗?(我不是要求您提供一个完全可以工作的实现,只是关于算法应该如何工作)


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


共 (6) 个答案

  1. # 1 楼答案

    这张牌有六个面,我们假设它们的概率相等。有三张黑色的脸,其中两张的另一面是黑色的。我们放弃了所有红脸占上风的情况,所以我们只关注三个概率相等的黑脸

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

  2. # 2 楼答案

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

  3. # 3 楼答案

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

    你没有正确执行的问题是:如果你看到的是一张这张脸上是黑色的卡片,那么另一张脸上是红色的几率有多大

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

  4. # 4 楼答案

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

    当你随机抽出一张卡片并把它放在桌子上时,有六种同样可能发生的事情:

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

    在这六个项目中,六分之三的结果是桌子上有一张黑色的面朝上的卡片

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

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

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

  5. # 5 楼答案

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

  6. # 6 楼答案

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

    只剩下红/黑和黑/黑卡片。同样,如果红色/黑色是红色的,我们不需要进一步注意。剩下的可能性是:

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