在Python中找到划艇选手减少游戏的赢家
假设我们有一个高度数组。有n个不同高度的塔。Amal和Bimal在玩游戏。游戏规则如下:
- Amal始终先行动。
-
在每次行动期间,当前玩家选择高度为X的塔并将其减少到Y [1 <= Y
- 没有行动的人将输掉比赛。
我们要找到获胜者的名字。
因此,如果输入如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 := height的大小
- 输出b :=一个大小为n的数组,并填充为0
- 对于范围为0到n – 1的i,执行以下操作:
- 如果height[i]与1相同,则
- b[i] := 0
- 否则
- b[i] := 0
- j := 2
- root :=高度的平方根的底数
- 当height[i]不等于1且j <= root时,执行以下操作:
- 如果height[i] mod j等于0,则
- 当height[i] mod j等于0时,请执行以下操作:
- b[i] := b[i] + 1
- height[i] :=高度[i]的底数
- j := j + 1
- 如果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