我們得到每條線的數字 N 和兩個點 (x1,y1) 和 (x2,y2) 的座標。目標是從給定的直線中找到可以穿過單點的最大直線數,使得沒有兩條直線相互覆蓋,並且不執行旋轉。
我們將直線表示為( 對) 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。兩條線的斜率不同。
輸入
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 增加斜率計數。
陣列 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; }
如果我們執行上面的程式碼,它將產生以下輸出-
Maximum distinct lines passing through a single point : 2
以上是通過一個點的最大不同直線數在C中的詳細內容。更多資訊請關注PHP中文網其他相關文章!