通过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(intx1[],inty1[],intx2[],inty2[])计算通过单个点的线数。
对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