我多久会输掉这场比赛?

机器算法验证 可能性 游戏
2022-03-28 07:11:08

我希望这个问题适合该网站,如果不能随意标记。

在我住的地方,有一个简单的纸牌游戏,你可以自己玩。牌是 40,比如说 A1 ... A10 , B1 ... B10 , C1 ... C10 , D1 ... D 10。游戏如下:

  1. 你将桌面上的所有 40 张牌面朝下扔掉。您必须创建一个 4x10 矩阵,如下所示。在心理上,您将每一行分配给一个类型(A、B、C 或 D),将每一列分配给一个数字(1...10)。

    cols:   _ 1 _ 2 _ 3 _ 4 _ 5 _ 6 _ 7 _ 8 _ 9 _ 10
    row A |
    row B |    HERE YOU HAVE THE 40 CARDS FACE-DOWN
    row C |
    row D |      X
    
  2. 请注意,现在每张牌,就像我用 X 检查过的牌一样,除了具有它的价值(因为它是向下的而你看不到)之外,它还通过它的位置严格地连接到另一张牌:X可以用它的位置来识别价值D2

  3. 你随机选择一张牌,比方说X

  4. 你翻转它,看看它的真正价值,比方说B7

  5. 你移动到位置B7并翻转那张牌,Y

    cols:   _ 1 _ 2 _ 3 _ 4 _ 5 _ 6 _ 7 _ 8 _ 9 _ 10
    row A |
    row B |                           Y
    row C |
    row D |      B7
    
  6. 很快。

如果您设法翻转所有卡片,您就赢了。如果在某个时候,您刚刚翻转的牌上的值指向已经出现的位置,您就输了。例如,如果Y有价值D2(发生),您将立即失去。

一个人输的概率是多少?

这可能是一个只需一些基本概念就可以解决的问题,但我没有。

2个回答

我们可以忽略行和列,只说你有 40 个位置和 40 张卡片,每个卡片都指向一个特定的位置。

第一次抽牌时,你有 40 张牌,但只有 1 张牌会让你输掉游戏(指向你选择的位置的牌)。这给出了 39/40 的概率进入下一轮。

在第二次抽牌中,你有39张牌可供选择,但仍然只有一张牌会让你输,因为指向第二个位置的牌已经从牌堆中淘汰了。唯一失败的牌是指向你原来位置的牌。这给出了 38/39 的概率继续进行。

这给出了以下公式:

39/40 * 38/39 * 37/38 * 36/37 * 35/36 * 34/35 * 33/34 * 32/33 * 31/32 * 30/31     * 29/30 * 28/29 * 27/28 * 26/27 * 25/26 * 24/25 * 23/24 * 22/23 * 21/22 * 20/21 * 19/20 * 18/19 * 17/18 * 16/17 * 15/16 * 14/15 * 13/14 * 12/13 * 11/12 * 10/11 * 9/10 * 8/9 * 7/8 * 6/7 * 5/6 * 4/5 * 3/4 * 2/3 * 1/2

[1] 0.025

所以获胜的概率是2.5%

我们可以在使用 R 的模拟中尝试此操作(您需要获取代码才能运行):

set.seed(1)
card.game <- function() {
  cards <- sample(1:40)
  pos <- seq(1:40)
  result <- NA
  for (i in 1:40) {
    if (i == 1) {
      current.pos <- sample(pos, 1)
      pos <- pos[which(pos!=current.pos)]
      continue <- length(which(pos==cards[current.pos]))
      if (continue == 0) {
        result <- 0
        return(result)
      }
    } else {
      if (i == 40) {
        result <- 1
        return(result)
      }
      current.pos <- cards[current.pos]
      pos <- pos[which(pos!=current.pos)]
      continue <- length(which(pos==cards[current.pos]))
      if (continue == 0) {
        result <- 0
        return(result)
      }
    }
  }
}
result <- NA
for (i in 1:100000) {
  result[i] <- card.game()
}
prop.table(table(result))

result
      0       1 
0.97494 0.02506 

如您所见,结果非常接近 2.5%,这证实了上述计算。

正如@Jonas 指出的那样,在整个游戏中只有一张失败的牌,而且是您一开始选择的那张。如果你翻转它,你就输了;如果那是你翻转的最后一张牌,你就赢了。

那么解决这个问题的一个更简单的方法可能是这样解释游戏:

  • 你说出一张牌;
  • 你将你的 40 张牌洗牌;
  • 如果您命名的卡是套牌中的最后一张(或等效的第一张),您就赢了。

从这个角度来看,很明显,你获胜的概率就是那张牌占据某个位置的概率,显然是1/40 = 0.025

因此,要回答我的问题,您将输掉p = 0.975.