檢查是否可以在 C++ 中從給定座標移動到所需座標


假設我們有兩個座標 (sx, sy) 和 (tx, ty),我們必須檢查是否可以從起點移動到終點。我們這裡的移動包括取一個點 (x, y) 並將其轉換為 (x, x+y) 或 (x+y, y) 中的任何一個。

因此,如果輸入是 (1, 1) 和 (4,5),則答案將為 true,這是因為將 (1,1) 移動到 (2,1),然後 (3,1),然後 (4,1),然後 (4,5)。

要解決這個問題,我們將遵循以下步驟 -

  • 當 tx > sx 且 ty > sy 時,執行 -
    • 如果 tx > ty,則 -
      • tx := tx 除以 ty
    • 否則
      • ty := ty 除以 tx
  • 返回 (sx 與 tx 相同且 sy <= ty 並且 (ty - sy) 對 tx 取餘為 0) 或 (sy 與 ty 相同且 x >= sx 且 (tx - sx) 對 ty 取餘為 0)

示例 (C++)

讓我們看看以下實現結果,以獲得更好的理解 -

 現場演示

#include <bits/stdc++.h>
using namespace std;
bool solve(int sx, int sy, int tx, int ty) {
   while(tx > sx && ty > sy){
      if(tx > ty){
         tx %= ty;
      }else ty %= tx;
   }
   return (sx == tx && sy <= ty && (ty - sy) % tx == 0) || (sy == ty && tx >= sx && (tx - sx) % ty == 0);
}
main(){
   cout << solve(1,1,4,5);
}

輸入

1, 1, 4, 5

輸出

1

更新於: 2021-01-19

242 次瀏覽

開啟您的職業生涯

完成課程以獲得認證

開始
廣告