首页 >后端开发 >C++ >通过一个点的最大不同直线数在C中

通过一个点的最大不同直线数在C中

WBOY
WBOY转载
2023-08-26 10:25:061168浏览

通过一个点的最大不同直线数在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删除