1. 主页 > 自考本科 >

桌子上有21根火柴小东和小华两人轮流取 桌上有20根火柴两人轮流从中拿

成人自考本科

桌子上有21根火柴 小东和小华两人轮流取

桌子上有21根火柴,小东和小华两人轮流取,每人每次取1-4根火柴,拿到最后一根火柴为胜方,两人都采用最聪明的策略,请问你认为谁会赢得游戏的胜利呢?

桌子上有21根火柴小东和小华两人轮流取 桌上有20根火柴两人轮流从中拿取

我们先来分析这道题目。假设就简单地用小东先手,不妨情况分为:

  • 1.小东拿1根火柴:剩余20根火柴,小华随便取完,剩余的总数肯定是19-16-13-10-7-4-1(小华取的数量)
  • 桌子上有21根火柴小东和小华两人轮流取

  • 2.小东拿2根火柴:剩余19根火柴,小华按照近似之前的策略取,剩余的总数就是18-15-12-9-6-3(小华取的数量+1)
  • 3.小东拿3根火柴:剩余18根火柴,小华按照近似之前的策略取,剩余的总数就是17-14-11-8-5-2(小华取的数量+2)
  • 4.小东拿4根火柴:剩余17根火柴,小华按照近似之前的策略取,剩余的总数就是16-13-10-7(小华取的数量+3)
  • 结合上述四种情况,可以计算出当火柴数量为5、9、13、17、21时,先手必胜。当火柴数量为1、2、3、4、6、7、8、10、11、12、14、15、16、18、19、20时,必败。如此一来,先手在遇到必败局面之前,会尽全力让自己进入胜利的轨道。

    接着我们再引出另一道题目——桌子上有20根火柴,两人轮流从中拿取,每次取1-4根,最后一根算输。如果与前置游戏相似先手赢,那么玩家何不全部都进行随机操作?但是反过来,若和先手输的游戏相似,那么判断两个玩家会聪明地进行操作以赢取游戏。因此我们推断出该游戏与第一个游戏的规则一致,仅改变了游戏结束的定义。多掷几个点,可能便会发现这个结论的准确性,而在数学上,可以用动态规划的方法。

    动态规划解法

    基本思想:将现有大问题转化若干个相对简单的小问题,再从最简单的小问题起逐步解决最初的原问题,解决过程中使用查表法,避免无用浪费。该算法一般用于在多阶段过程中,把决策按照顺序一层一层进行分解,从而完美地模拟出一个过程的运作,或者找到一种最优化的方案。

    利用动态规划算法,可以依照从第一步到第n步的顺序来进行

  • 1.确定状态
  • 2.转移方程(子问题之间的关系)
  • 3.边界情况
  • 对于这道题:

  • 第1步:还剩下20根火柴,先手必胜/必败
  • 第2步:还剩下19根火柴,先手必胜/必败
  • 第3步:还剩下18根火柴,先手必胜/必败
  • 第n步:还剩下n根火柴,先手必胜/必败
  • 接下来再考虑动态规划的转移方程。本题采用正难则反的方法,即假设先手胜为1,后手胜为0,那么在第n步时先手获胜的充要条件是先手在当前选取一定火柴后,使得后手无法获胜(此处我们假设后手采用最优策略),即

    g(n) = !( g(n-1) & g(n-2) & g(n-3) & g(n-4) )

    其中g(n)表示当前状态为n时,先手能否获胜。

    接下来我们考虑当n的值等于1、2、3、4时,先手必败。这也是边界情况。

    代码实现及结果

    ```python def canWinNim(n): if n <= 4: return True # 先手必败的边界情况 dp = [False] * (n + 1) dp[1], dp[2], dp[3], dp[4] = True, True, True, True for i in range(5, n + 1): dp[i] = not(dp[i - 1] & dp[i - 2] & dp[i - 3] & dp[i - 4]) return dp[n]

    我们可以自己构建若干组数据,验证此算法的正确性。结果如下:

    ```python print(canWinNim(4)) # True print(canWinNim(15)) # True print(canWinNim(20)) # False

    我们可以看到,对于n等于20时,返回的结果为False,即先手必败。符合罗尔言的推论。

    总结

    这两道题目十分有趣,探讨了在游戏中的输赢问题,并使用计算的方法得到了较为准确的结果,除此之外,随着我们对算法技术不断的上升与需求不断的拓展,算法的应用领域也将愈发广泛,而正如所说,每一次解决问题的过程,都是对思维能力的鞭策,是一步步进阶的过程,希望在学习过程中大家能够获得收获,提高自身素养。

    本站部分信息来自互联网,如涉及教育信息,请以官方发布的通知信息为准,本站信息仅供参考:https://www.sscta.com/benke/2980.html