假设我们有一个数组高度。有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 获胜。
让我们看看以下实现以获得更好的理解 -
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