通过添加数组中元素的成对差异来找到获胜者,直到在Python中可能

假设我们有一个正整数数组A,元素是唯一的,现在,两个玩家P和Q正在玩游戏。在每一步中,任何一个玩家从数组中选择两个数字a和b,如果| a – b | 之后,播放器将此数字添加到数组中,则该数组不在数组中。当玩家无法采取行动时输掉比赛。如果玩家P总是开始游戏,我们必须找到游戏的赢家。

因此,如果输入类似于A = [8,9,10],则输出将为P。

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

  • n:= arr的大小

  • g:= arr [0],max_val:= arr [0]

  • 对于1到n范围内的i,执行

    • g:= gcd(g,arr [i])

    • max_val:= max_val,arr [i]的最大值

  • 总计:=(max_val / g)-n

  • 如果总数是奇数,则

    • 返回“ P”

  • 返回“ Q”

示例

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

from math import gcd
def who_is_the_winner(arr) :
   n = len(arr)
   g = arr[0]
   max_val = arr[0]
   for i in range(1, n) :
      g = gcd(g, arr[i])
      max_val = max(max_val, arr[i])
   total = (max_val / g) - n
   if (total % 2 == 1) :
      return 'P'
   return 'Q'

arr = [8,9,10]
print(who_is_the_winner(arr))

输入值

[8,9,10]

输出结果

P
猜你喜欢