用 C++ 程序寻找点
假设我们有一个起始点 (sx, sy),和目标点 (tx, ty),我们必须检查从起始点到终点是否存在一系列移动。此处的移动包括取一个点 (x, y) 并将其转换为 (x, x+y) 或 (x+y, y)。
因此,如果输入是 (1, 1) 和 (4,5),则答案将为真,这是因为将 (1,1) 移动到 (2,1),然后到 (3,1),然后到 (4,1),然后到 (4,5)。
为了解决这个问题,我们将遵循以下步骤:
- 当 tx > sx 且 ty > sy 时执行以下操作:
- 如果 tx > ty,则:
- tx := tx mod ty
- 否则
- ty := ty mod tx
- 如果 tx > ty,则:
- 返回(当 sx 与 tx 相同且 sy <= ty 且 (ty - sy) mod tx 与 0 相同时为 true)或(当 sy 与 ty 相同且 x >= sx 且 (tx - sx) mod ty 为 0 时为 true)
为了更好地理解,让我们看看以下实现:
示例
#include <bits/stdc++.h> using namespace std; class Solution { public: bool reachingPoints(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(){ Solution ob; cout << (ob.reachingPoints(1,1,4,5)); }
输入
1 1 4 5
输出
1
广告