Python 程式檢查一個點是否可以轉換為另一個點


假設我們有一個起點 (sx, sy) 和一個目標點 (tx, ty),我們需要檢查是否存在從起點到終點的移動序列。這裡的移動包括取一個點 (x, y) 並將其轉換為 (x, x+y) 或 (x+y, y)。

所以,如果輸入類似於 (sx, sy) = (1,1) (tx, ty) = (4,5),則輸出將為 True,這是因為可以將 (1,1) 移動到 (2,1),然後 (3,1),然後 (4,1),然後 (4,5)。

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

  • 定義一個函式 solve()。它將接收 sx、sy、tx、ty 作為引數。

  • 如果 sx > tx 或 sy > ty,則

    • 返回 False

  • 如果 sx 等於 tx,則

    • 返回 (ty-sy) 對 sx 取模是否等於 0

  • 如果 sy 等於 ty,則

    • 返回 (tx - sx) 對 sy 取模是否等於 0

  • 返回 solve(sx, sy, tx-ty, ty) 或 solve(sx, sy, tx, ty-tx)

示例

讓我們看看下面的實現以更好地理解。

def solve(sx, sy, tx, ty):
   if sx > tx or sy > ty:
      return False
   if sx == tx:
      return (ty-sy)%sx == 0
   if sy == ty:
      return (tx - sx)%sy == 0
   return solve(sx, sy, tx-ty, ty) or solve(sx, sy, tx, ty-tx)

(sx, sy) = (1,1)
(tx, ty) = (4,5)
print(solve(sx, sy, tx, ty))

輸入

(1,1), (4,5)

輸出

True

更新於: 2021年10月8日

95 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.