Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

C에서 단일 점을 통과하는 최대 고유 선


각 라인에 대해 숫자 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