각 선에 대해 숫자 N과 두 점 (x1,y1) 및 (x2,y2)의 좌표를 얻습니다. 목표는 주어진 직선 중에서 두 개의 직선이 서로 겹치지 않고 회전이 수행되지 않도록 단일 점을 통과할 수 있는 최대 직선 수를 찾는 것입니다.
직선을 (쌍) m,c)로 표현하겠습니다. 여기서 y=mx+c,m은 기울기 m=y2-y1/x2-x1
c1!=c2로 가정할 때 동일한 m을 갖는 선은 다음과 같습니다. 평행. 다양한 경사를 미터 단위로 계산해 보겠습니다. 수직선의 경우 x1=x2이면 기울기 = INT_MAX이고, 그렇지 않으면 m입니다.
예문을 통해 이해해 보세요.
Input
Line 1 (x1,y1)=(4,10) (x2,y2)=(2,2) Line 2 (x1,y1)=(2,2) (x2,y2)=(1,1)
Output
Maximum lines: 2
설명 - 버스 수는 2대입니다. 두 선의 기울기가 다릅니다.
Input
Line 1 (x1,y1)=(1,5) (x2,y2)=(3,2) Line 2 (x1,y1)=(2,7) (x2,y2)=(2,8)
Output
Maximum lines: 2
Description - 버스 수는 2대입니다. 둘 다 경사도가 다릅니다.
정수 배열 x1[] 및 x2[]는 선 위의 점 좌표를 저장하는 데 사용됩니다.
함수 numLines(int x1[],int y1[], int x2[], int y2[])는 단일 점을 통과하는 선의 수를 계산합니다.
x1[],y1[],x2[],y2[]의 각 점에 공식을 적용하여 기울기를 계산하고 k를 사용하여 기울기 수를 증가시킵니다.
배열 s[]는 기울기 값을 저장합니다.
>k를 결과의 행 수로 반환합니다.
Live Demo
#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 중국어 웹사이트의 기타 관련 기사를 참조하세요!