Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm người chiến thắng trò chơi giảm người chèo thuyền bằng Python

Giả sử chúng ta có một chiều cao mảng. Có n tháp khác nhau với chiều cao khác nhau. Amal và Bimal đang chơi một trò chơi. Luật chơi như dưới đây

  • Amal luôn chơi trước

  • Trong mỗi lần di chuyển, người chơi hiện tại chọn một tháp có chiều cao X và giảm chiều cao xuống Y [1 <=Y

  • Ai không di chuyển sẽ thua trò chơi

Chúng tôi phải tìm ra tên của người chiến thắng.

Vì vậy, nếu đầu vào giống như height =[3,1,2], thì đầu ra sẽ là Bimal, vì độ cao ban đầu là {3,1,2}. Nếu Amal giảm chiều cao của tháp 2 xuống 1, Bimal có thể giảm 3 đi 1, nhưng Amal không có động thái nào nên Bimal thắng.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một hàm dùng (). Điều này sẽ mất a, n
  • ans:=0
  • đối với tôi trong phạm vi từ 0 đến n - 1, thực hiện
    • ans:=ans XOR a [i]
  • trả lại ans
  • Từ phương thức chính, hãy làm như sau
  • n:=kích thước chiều cao
  • b:=một mảng có kích thước n và điền bằng 0
  • đối với tôi trong phạm vi từ 0 đến n - 1, thực hiện
    • nếu chiều cao [i] bằng 1, thì
      • b [i]:=0
    • nếu không thì
      • b [i]:=0
      • j:=2
      • root:=tầng của căn bậc hai của chiều cao [i]
      • trong khi chiều cao [i] không giống 1 và j <=root, do
        • nếu chiều cao [i] mod j bằng 0, thì
          • trong khi chiều cao [i] mod j bằng 0, hãy thực hiện
            • b [i]:=b [i] + 1
            • height [i]:=tầng chiều cao [i] / j
        • j:=j + 1
      • nếu chiều cao [i] không giống với 1, thì
        • b [i]:=b [i] + 1
  • ans:=use (b, n)
  • nếu ans không giống 0, thì
    • trả lại "Amal"
  • nếu không,
    • trả về "Bimal"

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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))

Đầu vào

[3,1,2]

Đầu ra

Bimal