各ラインの数値 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 サイトの他の関連記事を参照してください。