ホームページ > バックエンド開発 > C++ > C の点を通る明確な直線の最大数

C の点を通る明確な直線の最大数

WBOY
リリース: 2023-08-26 10:25:06
転載
1203 人が閲覧しました

C の点を通る明確な直線の最大数

各ラインの数値 N と 2 つの点 (x1,y1) と (x2,y2) の座標を取得します。目的は、2 つの直線が重なり合わず、回転も実行されないように、指定された直線から 1 点を通過できる直線の最大数を見つけることです。

直線を (ペア) m,c) として表します。ここで、y=mx c,m は傾き m=y2-y1/x2-x1

c1!=c2 が与えられた場合、 , 同じmの線は平行です。さまざまな勾配をメートル単位で計算します。垂直線の場合、x1=x2 の場合、傾き = INT_MAX、それ以外の場合は m。

例を通して理解しましょう。

入力

Line 1 (x1,y1)=(4,10) (x2,y2)=(2,2)
Line 2 (x1,y1)=(2,2) (x2,y2)=(1,1)
ログイン後にコピー

出力

Maximum lines: 2
ログイン後にコピー
ログイン後にコピー

説明 ・バスライン数は2本です。 2つの線の傾きは異なります。

入力

Line 1 (x1,y1)=(1,5) (x2,y2)=(3,2)
Line 2 (x1,y1)=(2,7) (x2,y2)=(2,8)
ログイン後にコピー

出力

Maximum lines: 2
ログイン後にコピー
ログイン後にコピー

説明 ・バスライン数は2本です。どちらも勾配が異なります。

次のプログラムで使用されるメソッドは次のとおりです。

  • 整数配列 x1[] および x2[] は、線上の点の座標を格納するために使用されます。

  • 関数 numLines(int x1[],int y1[], int x2[], int y2[]) は、単一点を通過する線の数を数えます。

  • x1[]、y1[]、x2[]、y2[] の各点に式を適用して傾きを計算し、k を使用して傾きカウントを増分します。

  • Array s[] には、傾きの値が格納されます。

    >
  • 結果の行数として k を返します。

ライブ デモンストレーション

#include <stdio.h>
int numLines(int n, int x1[], int y1[], int x2[], int y2[]){
   double s[10];
   int k=0;
   double slope;
   for (int i = 0; i < n; ++i) {
      if (x1[i] == x2[i])
         slope = 999;
      else
         slope = (y2[i] - y1[i]) * 1.0 / (x2[i] - x1[i]) * 1.0;
         s[k++]=slope;
   }
   return k;
}
int main(){
   int n = 2;
   int x1[] = { 1, 5 }, y1[] = { 3, 2 };
   int x2[] = { 2,7 }, y2[] = { 2, 8 };
   printf("Maximum lines: %d", numLines(n, x1, y1, x2, y2));
   return 0;
}
ログイン後にコピー

出力

上記のコードを実行すると、次の出力が生成されます-

rreeee

以上がC の点を通る明確な直線の最大数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート