首頁 >後端開發 >C++ >通過一個點的最大不同直線數在C中

通過一個點的最大不同直線數在C中

WBOY
WBOY轉載
2023-08-26 10:25:061190瀏覽

通過一個點的最大不同直線數在C中

我們得到每條線的數字 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中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除