用 Python 编写程序,找出划船者减少游戏的获胜者

pythonserver side programmingprogramming更新于 2026/1/30 18:52:17

假设我们有一个高度数组。有 n 个不同的塔,高度不同。Amal 和 Bimal 正在玩游戏。游戏规则如下

  • Amal 总是先出手

  • 在每次移动过程中,当前玩家选择高度为 X 的塔,并将高度减少到 Y [1 <= Y < X; Y 整除 X]

  • 没有移动的人将输掉游戏

我们必须找出获胜者的名字。

因此,如果输入为 height = [3,1,2],则输出将是 Bimal,因为初始高度为 {3,1,2}。如果 Amal 将塔高 2 降低到 1,Bimal 可以将 3 降低 1,但 Amal 无法移动,因此 Bimal 获胜。

为了解决这个问题,我们将遵循以下步骤 −

  • 定义一个函数 util() 。这将需要 a,n
  • ans := 0
  • 对于范围在 0 到 n - 1 内的 i,执行
    • ans := ans XOR a[i]
  • 返回 ans
  • 从主方法执行以下操作
  • n := 高度的大小
  • b := 大小为 n 的数组并用 0 填充
  • 对于范围在 0 到 n - 1 内的 i,执行
    • 如果 height[i] 与 1 相同,则
      • b[i] := 0
    • 否则
      • b[i] := 0
      • j := 2
      • root := height[i] 平方根的底数
      • 当 height[i] 不等于 1 且 j<=root 时,执行
        • 如果 height[i] mod j 等于 0,则
          • 当 height[i] mod j 等于 0 时,执行
            • b[i] := b[i] + 1
            • height[i] := height[i]/j 的底数
        • j := j + 1
      • 如果 height[i] 不等于 1,则
        • b[i] := b[i] + 1
  • ans := util(b, n)
  • 如果 ans 不等于 0,则
    • 返回 "Amal"
  • 否则,
    • 返回 "Bimal"

示例

让我们看看下面的实现以便更好地理解 −

def util(a,n):
   ans = 0
   for i in range(n):
      ans = ans^a[i]

   return ans

def solve(height):
   n = len(height)
   b = [0 for i in range(n)]

   for i in range(n):
      if(height[i] == 1):
         b[i] = 0
      else:
         b[i] = 0
         j = 2

         root = int(pow(height[i],0.5))
         while(height[i] != 1 and j<=root):
            if(height[i]%j == 0):
               while(height[i]%j == 0):
                  b[i] += 1
                  height[i] = height[i]//j

            j += 1

         if(height[i] != 1):
            b[i] += 1

   ans = util(b, n)

   if(ans != 0):
      return "Amal"
   else:
      return "Bimal"

height = [3,1,2]
print(solve(height))

输入

[3,1,2]

输出

Bimal

相关文章


有用资源