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

开启您的职业生涯

完成课程以获得认证

开始
广告
© . All rights reserved.