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

C++の2つのポイント間の積分ポイントの数


このチュートリアルでは、指定された2つのポイント間の整数ポイントの数を見つけるプログラムを作成します。

与えられた2つのポイント間のポイント数はgcd(abs(x2)、abs(y1-y2))-1になります。

線の結合がx軸に平行である場合、整数点の数はabs(y1 --y2)-1になります。

線の結合がy軸に平行である場合、整数点の数はabs(x1-x2)-1

になります。

両方の点のx点が等しい場合、それらはx軸に平行です。両方の点のy点が等しい場合、それらはy軸に平行です。

例を見てみましょう。

入力

pointOne = [1, 5]
pointTwo = [1, 3]

出力

1

アルゴリズム

  • 2つのポイントを開始します。
  • それらがx軸に平行であるかどうかを確認します。
  • x軸に平行な場合は、式abs(y1 --y2)-1を使用します。
  • それらがy軸に平行であるかどうかを確認します。
  • それらがy軸に平行である場合は、式abs(x1-x2)-1を使用します。
  • どの軸にも平行でない場合は、式gcd(abs(x1-x2)、abs(y1- y2))-1を使用します。
  • 結果を計算して印刷します。

実装

以下は、C++での上記のアルゴリズムの実装です

#include <bits/stdc++.h>
using namespace std;
int gcd(int a, int b) {
   if (b == 0) {
      return a;
   }
   return gcd(b, a % b);
}
int getCount(int pointOne[], int pointTwo[]) {
   if (pointOne[0] == pointTwo[0]) {
      return abs(pointOne[1] - pointTwo[1]) - 1;
   }
   if (pointOne[1] == pointTwo[1]) {
      return abs(pointOne[0] - pointTwo[0]) - 1;
   }
   return gcd(abs(pointOne[0] - pointTwo[0]), abs(pointOne[1] - pointTwo[1])) - 1;
}
int main() {
   int pointOne[] = {1, 3}, pointTwo[] = {10, 12};
   cout << getCount(pointOne, pointTwo) << endl;
   return 0;
}

出力

上記のコードを実行すると、次の結果が得られます。

8

  1. C++五胞体数

    五胞体数は、パスカルの三角形の5番目の数として表されます。ご存知のように、これは5番目の数字です。つまり、パスカルの三角形に少なくとも5つの数字が必要です。したがって、このシリーズの最初の数字は 1 4 6 4 1から始まります。 パスカルの三角形の4行目。したがって、このチュートリアルでは、たとえば、n番目の五胞体数を見つける必要があります Input : 1 Output : 1 Input : 4 Output : 35 次の図から出力を確認できます- この問題については、可能な限り、これは一種のシリーズであるため、ソリューションでこのシリーズのパターンを見つけようと

  2. C++のBSTの2つのノード間の最大要素

    問題の説明 N個の要素の配列と、指定された配列に属する2つの整数A、Bが与えられます。 arr[0]からarr[n-1]に要素を挿入して、二分探索木を作成します。タスクは、AからBへのパスで最大の要素を見つけることです。 例 配列が{24、23、15、36、19、41、25、35}の場合、次のようにBSTを形成できます- A=19およびB=41とすると、これら2つのノード間の最大要素は41です。 アルゴリズム ノードAおよびBの最も低い共通祖先(LCA)を見つけます。 LCAとAの間の最大ノードを見つけます。これをmax1と呼びましょう LCAとBの間の最大ノードを見つけます。こ