Python程式:計算騎士在棋盤上移動且不離開棋盤的機率
假設我們有四個值n、x、y和k。其中n表示n x n的棋盤,座標(x, y)表示騎士的初始位置。騎士必須走k步,每一步都可以隨機選擇8個方向中的任何一個方向移動。我們需要找到騎士在走完k步後仍然留在棋盤上的機率百分比(四捨五入到最接近的整數)。條件是:一旦騎士離開棋盤,就不能再回到棋盤上。
例如,如果輸入為n = 8,(x = 0, y = 0),k = 1,則輸出為50。因為這是一個8x8的棋盤,騎士的初始位置為(1, 1)。它可以走k = 1步。走一步後,它只有在8個位置中的4個位置上才會留在棋盤內,而在其他位置上則會落在棋盤外。所以機率是50%。

為了解決這個問題,我們將遵循以下步驟:
- 建立一個移動列表:[(1, 2) ,(1, -2) ,(-1, 2) ,(-1, -2) ,(2, 1) ,(2, -1) ,(-2, 1) ,(-2, -1) ]
- 定義一個函式dfs()。它將接收x、y、k作為引數。
- 如果(x, y)不在棋盤範圍內,則
- 返回0
- 如果k等於0,則
- 返回1
- s = 空列表
- 對所有移動(dx, dy) in moves:
- x = dfs(x + dx, y + dy, k - 1) / 8
- 將x新增到s中
- 返回s中所有元素的和
- 在主方法中執行以下操作:
- 返回(dfs(x, y, k) * 100)四捨五入到最接近的整數的結果
讓我們來看下面的實現,以便更好地理解:
示例
moves = [(1, 2), (1, -2), (-1, 2), (-1, -2), (2, 1), (2, -1), (-2, 1), (-2, -1)] class Solution: def solve(self, n, x, y, k): def dfs(x, y, k): if x < 0 or y < 0 or x >= n or y >= n: return 0 if k == 0: return 1 return sum(dfs(x + dx, y + dy, k - 1) / 8 for dx, dy in moves) return int(dfs(x, y, k) * 100) ob = Solution() n = 8 x = 1 y = 1 k = 1 print(ob.solve(n, x, y, k))
輸入
8, 1, 1, 1
輸出
0
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP