检查是否可以在 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