用 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 的底数
- 当 height[i] mod j 等于 0 时,执行
- j := j + 1
- 如果 height[i] mod j 等于 0,则
- 如果 height[i] 不等于 1,则
- b[i] := b[i] + 1
- 如果 height[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
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

