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

Chương trình tìm số bước di chuyển dự kiến ​​cần thiết để giành chiến thắng trong trò chơi Lotus và Caterpillar bằng Python

Giả sử chúng ta có một lưới với n hàng và m cột. Amal và Bimal đang chơi một trò chơi trên lưới đó. Luật chơi như dưới đây -

Amal đặt gạch hoa sen trắng ở hàng trên cùng và Bimal đặt gạch hình con sâu ở đâu đó ở hàng dưới cùng. Amal bắt đầu trò chơi và họ đang chơi xen kẽ. Amal có thể di chuyển ô của mình đến bất kỳ ô nào trong số 8 ô liền kề bên trong lưới của ô hiện tại, nhưng ô sâu bướm của Bimal chỉ có thể di chuyển sang trái hoặc phải bên trong lưới hoặc giữ nguyên vị trí. Mục tiêu của Amal là bắt Bimal bằng cách sử dụng càng ít di chuyển càng tốt, trong khi Bimal (với ô sâu bướm) phải sống sót càng lâu càng tốt. Nếu họ chọn ngẫu nhiên hai cột để đặt hoa sen và sâu bướm, thì chúng ta phải tìm số lượng nước đi dự kiến ​​cần thiết để giành chiến thắng trong trò chơi này của Amal.

Vì vậy, nếu đầu vào là n =5 m =7, thì đầu ra sẽ là 4,571428571428571.

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

  • r:=0
  • đối với l trong phạm vi từ 0 đến m - 1, thực hiện
    • temp:=n - 1,0
    • nếu l> =n, thì
      • temp:=temp + (l - n + 1) * ((l - 1) / m)
    • nếu l
    • temp:=temp + (m - n - l) * ((m - l - 2) / m)
  • r:=r + temp / m
  • trả về r
  • Ví dụ

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

    def solve(n, m):
       r = 0
    
       for l in range(m):
          temp = n - 1.0
          if l >= n:
             temp += (l - n + 1) * ((l - 1) / m)
          if l < m - n:
             temp += (m - n - l) * ((m - l - 2) / m)
          r += temp / m
    
       return r
    
    n = 5
    m = 7
    print(solve(n, m))

    Đầu vào

    5, 7
    

    Đầu ra

    4.571428571428571