Python程式:計算贏得蓮花與毛毛蟲遊戲中所需預期步數


假設我們有一個n行m列的網格。Amal和Bimal在這個網格上玩遊戲。遊戲規則如下:

Amal在頂行某個位置放置白色蓮花棋子,Bimal在底行某個位置放置毛毛蟲棋子。Amal先開始遊戲,他們輪流進行。Amal可以將他的棋子移動到當前單元格網格內任何8個相鄰單元格,但Bimal的毛毛蟲棋子只能在網格內向左或向右移動,或者保持在同一位置。Amal的目標是用盡可能少的步數抓住Bimal,而Bimal(用毛毛蟲棋子)則必須儘可能長時間地生存。如果他們隨機選擇兩列放置他們的蓮花和毛毛蟲,那麼我們必須找到Amal贏得這場遊戲所需的預期步數。

因此,如果輸入為n = 5 m = 7,則輸出為4.571428571428571。

為了解決這個問題,我們將遵循以下步驟:

  • r := 0
  • 對於l從0到m - 1迴圈:
    • temp := n - 1.0
    • 如果l >= n,則
      • temp := temp + (l - n + 1) * ((l - 1) / m)
    • 如果l < m - n,則
      • temp := temp + (m - n - l) * ((m - l - 2) / m)
    • r := r + temp / m
  • 返回r

示例

讓我們看看下面的實現,以便更好地理解:

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

輸入

5, 7

輸出

4.571428571428571

更新於:2021年10月25日

瀏覽量:111

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.