ホームページ  >  記事  >  バックエンド開発  >  C++ では、2 点間の整数点の数を数えます。

C++ では、2 点間の整数点の数を数えます。

WBOY
WBOY転載
2023-09-02 21:57:071032ブラウズ

C++ では、2 点間の整数点の数を数えます。

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

指定された 2 つの点の間の点の数は、gcd(abs(x2), abs(y1-y2)) - 1 になります。

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

接続線が y 軸に平行な場合、整数点の数は abs(x1 - x2) - 1 になります。

2 つの点の x 座標が等しい場合、それらは x 軸に平行です。 2 つの点の 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;
}

出力

上記のアルゴリズムの C での実装です。上記のコードを実行すると、次の結果が得られます。以下の結果。

えええええ

以上がC++ では、2 点間の整数点の数を数えます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。