Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 노 젓는 사람 줄이기 게임의 승자를 찾는 프로그램

<시간/>

배열 높이가 있다고 가정합니다. 높이가 다른 n개의 다른 타워가 있습니다. 아말과 비말이 게임을 하고 있습니다. 게임 규칙은 다음과 같습니다.

  • Amal은 항상 먼저 플레이합니다.

  • 각 이동 중에 현재 플레이어는 높이가 X인 타워를 선택하고 높이를 Y로 줄입니다[1 <=Y

  • 움직임이 없는 사람은 게임에서 집니다.

승자의 이름을 찾아야 합니다.

따라서 입력이 height =[3,1,2]와 같으면 초기 높이가 {3,1,2}이므로 출력은 Bimal이 됩니다. Amal이 타워 2의 높이를 1로 줄이면 Bimal은 3을 1로 줄일 수 있지만 Amal은 이동하지 않으므로 Bimal이 이깁니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • util() 함수를 정의합니다. ,n
  • ans :=0
  • 0 ~ n - 1 범위의 i에 대해
    • ans :=XOR a[i]
  • 반환
  • 기본 방법에서 다음을 수행합니다.
  • n :=높이 크기
  • b :=크기가 n이고 0으로 채워지는 배열
  • 0 ~ n - 1 범위의 i에 대해
    • 높이[i]가 1과 같으면
      • b[i] :=0
    • 그렇지 않으면
      • b[i] :=0
      • j :=2
      • root :=높이의 제곱근의 바닥[i]
      • height[i]가 1과 같지 않고 j<=root, do
        • 높이[i] mod j가 0과 같으면
          • 높이[i] mod j가 0인 동안 do
            • b[i] :=b[i] + 1
            • 높이[i] :=높이[i]/j의 바닥
        • j :=j + 1
      • 높이[i]가 1과 같지 않으면
        • b[i] :=b[i] + 1
  • ans :=util(b, n)
  • as가 0과 같지 않으면
    • "아말" 반환
  • 그렇지 않으면
    • "비말" 반환

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

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