C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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
  • return(sxがtxANDsyと同じ場合はtrue<=ty AND(ty --sy)mod txは0と同じ)OR(syはty AND x> =sx AND(tx --sx)modtyと同じは0)

理解を深めるために、次の実装を見てみましょう-

#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

  1. C++でのライン上の最大ポイント

    2D平面があるとします。同じ直線上にある点の最大数を見つける必要があります。したがって、ポイントが次のような場合- それから4つのポイントがあります これを解決するには、次の手順に従います- n:=ポイントの数、n <3の場合、nを返します ans:=2 1からn–1の範囲のiの場合 カウント:=0 インデックスiとi– 1から2つのポイントを取ります。これらは、p1、p2です。 p1ポイントとp2ポイントが同じ場合、 0からn–1の範囲のjの場合 points [j] .x=p1.xおよびpoints[j].y =p1.yの場合、

  2. C++の中間点を使用して長方形の角を見つける

    長方形ABCDがあると仮定しますが、中点PとQの座標、および長方形Lの長さしかありません。 私たちのタスクは、PとQの座標、および辺Lの長さを使用して、A、B、C、およびDの座標を見つけることです。たとえば、Pが(1、0)、Qが(1、2)の場合、およびLが2の場合、A、B、C、Dはそれぞれ(0、0)、(0、2)、(2、2)になります。 (2、0)。 発生する可能性のあるケースは3つあります。 長方形は水平であるため、ADとBCはX軸に平行です 長方形は垂直であるため、ADとBCはY軸に平行です 長方形は軸に対して特定の角度で傾斜しています。 3番目のケースでは、PとQの座標を使