C語言中透過單個點的最大不同直線數
給定數字 N 和每條線的兩個點的座標 (x1,y1) 和 (x2,y2)。目標是找到從給定線中可以穿過單個點的最大線數,使得沒有兩條線相互覆蓋,並且不進行旋轉。
我們將用 (m,c) 對錶示直線,其中 y=mx+c 且 m 是斜率 m=y2-y1/x2-x1
如果 c1!=c2,則具有相同 m 的直線是平行的。我們將計算不同的斜率 (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
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP