檢查是否可以在 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
- 如果 tx > ty,則 -
- 返回 (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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP