用 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
  • 返回(当 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

更新于: 02-6 月 2020

148 次浏览

开启你的职业生涯

获得认证,完成课程

立即开始
广告