각 라인에 대해 숫자 N과 두 점 (x1,y1) 및 (x2,y2)의 좌표가 제공됩니다. 목표는 주어진 선에서 두 선이 서로 덮지 않고 회전이 수행되지 않도록 단일 점을 통과할 수 있는 최대 선 수를 찾는 것입니다.
y=mx+c이고 m은 기울기 m=y2-y1/x2-x1
인 (m,c) 쌍으로 선을 나타냅니다.m이 같은 선은 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