【问题标题】:Coin Game Problem number of ways to win when input is 7硬币游戏问题输入为7时的获胜方式数
【发布时间】:2019-10-20 03:21:22
【问题描述】:

我正在研究经典的硬币游戏问题:
爱丽丝和鲍勃正在使用一堆硬币玩游戏。玩家依次从一堆硬币中挑选出几个硬币。每次允许玩家选择 1、2 或 4 个硬币,获得最后一个硬币的玩家为获胜者。爱丽丝选择了第一个。
我其实不明白结果是怎么来的。

    coinGame(1)= ('Alice', 1)
    coinGame(2) = ('Alice', 1)
    coinGame(3) = ('Bob', 2)
    coinGame(4) = ('Alice', 3)
    coinGame(5) = ('Alice', 2)
    coinGame(6) = ('Bob', 6)
    coinGame(7) = ('Alice', 8).

我了解 1,2,3...6 的输出,但我不了解 7 及之后的输出。
对于输入 6,因为 Alice 总是会到达硬币 2、4 和 5。因此,Bob 只需选择 1、2 或 4 中的任何一个即可赢得比赛。总路数是 1 + 3 + 2 = 6 对于输入 7,Bob 可以达到 3 和 6,然后 Alice 只需选择 4 或 1 个硬币即可赢得游戏,其中 2 + 6 = 8 种获胜方式。我不明白的是,对于输入 7,Alice 也可以达到 5,然后 Bob 只需选择 2 即可获胜。为什么我们忽略了这个案例并认为 Alice 赢了?

我希望我能得到一些澄清。

谢谢!

【问题讨论】:

  • coinGame 的输入代表什么,输出代表什么? (winner, ?)
  • @ChrisGong 是计算结果的算法,数字是获胜方式的数量。
  • 假设两个玩家都玩得很完美。这就像 nim 的游戏,你必须从获胜的位置走到失败的位置才能仍然获胜。正如你所说,Alice 从 7 可以到 6 或 3,所以你可以将 6 和 3 的路数相加,即 2 + 6 = 8。Alice 不会做失败的举动并去 5,除非爱丽丝没有获胜的棋步,否则您将取 1、2 和 4 个硬币的方式数相加,这就是为什么 6 有 2 + 3 + 1 = 6 种方式。

标签: algorithm data-structures


【解决方案1】:

一个关键点
如果鲍勃赢了比赛,那么有一些策略会让开始比赛的人松懈。
如果 Alice 赢了游戏,那么开始游戏的人就赢了。

因此,从每个 N 中检查 Bob 在 N-1、N-2 和 N-4 中是否有任何获胜位置。 如果是,那么 Alice 将以 Bob 获胜的位置总和获胜。

如果爱丽丝从 N-1、N-2 和 N-4 中获胜,那么爱丽丝肯定会从 N 中输掉这场比赛。
因为从 N-1、N-2 和 N-4 位置开始比赛的人正在赢得比赛。 当 Alice 将轮到 Bob 时,Bob 将只得到 N-1、N-2 和 N-4 中的一个。 从这些位置开始比赛的人将赢得比赛。

N>=5
sum=0
if Bob wins in N-1
    sum+=coinGame(N-1).count
if Bob wins in N-2
    sum+=coinGame(N-2).count
if Bob Wins in N-4 
    sum+=coinGame(N-4).count

if sum==0
   Bob wins with coinGame(N-1).count + coinGame(N-2).count + coinGame(N-4).count
else
   Alice wins with sum

找币游戏(7)
给定 coinGame(3) = ('Bob', 2) 7-4
coinGame(5) = ('Alice', 2) 7-2
coinGame(6) = ('Bob', 6) 7-1

鲍勃从 6 和 3 开始以 6 计数赢得比赛
所以 Alice 会从 7 到 8 赢得比赛

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    相关资源
    最近更新 更多