Python程序:检查阿玛尔能否赢得石头游戏

Python程序:检查阿玛尔能否赢得石头游戏

假设有两个玩家阿玛和比马尔,他们正在玩一个游戏,阿玛先行。最初,堆中有n个不同的石头。在每个玩家的回合中,他会移除堆中任意数量的平方数(非零)石头。如果一个玩家不能移动,他就输了。因此,如果我们有n,我们必须检查Amal能否赢得游戏。

因此,如果输入如n = 21,则输出将为True,因为阿玛将首先取16,然后Bimal取4,然后阿玛取1并赢得比赛。

要解决此问题,我们将遵循以下步骤:

  • squares:=新列表

  • square:=1

  • 增加:=3

  • while square <= n,do

    • 在squares的末尾插入平方数

    • square:= square + increase

    • increase:= increase + 2

  • 将平方插入到squares的末尾

  • dp:=大小为(n + 1)的空列表

  • dp[0]:= False

  • for k in range 1 to n,do

    • s:= 0

    • dp[k]:= False

    • while squares[s] <= k and dp[k]为空,do

      • 如果dp[k-squares[s]]为空,则

      • dp[k]:= True

      • s:= s +1

  • 返回dp的最后一个元素

例子

让我们看看以下实现以更好地理解

  def solve(n):
     squares = []
     square = 1
     increase = 3
     while square <= n:
        squares.append(square)
        square += increase
        increase += 2
     squares.append(square)

     dp = [None] * (n + 1)
     dp[0] = False
     for k in range(1, n + 1):
        s = 0
        dp[k] = False
        while squares[s] <= k and not dp[k]:
           if not dp[k - squares[s]]:
              dp[k] = True
           s += 1
     return dp[-1]

  n = 21
  print(solve(n))

输入

21

输出

True

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程