이 기사에서는 두 개의 평행선만 주어진 모든 좌표점을 가질 수 있는지 여부를 찾는 프로그램에 대해 논의할 것입니다.
이를 위해 좌표가 (i,rr[i])가 되도록 배열이 제공됩니다. 배열이 주어졌다고 가정해 봅시다.
arr = {2,6,8,12,14}
그런 다음 이 점을 두 개의 평행선에 가질 수 있습니다. 첫 번째 줄에는 (1,2), (3,8)이 포함됩니다. 및 (5,14) . 나머지 좌표가 있는 두 번째 줄, 즉 (2,6) 및 (4,12).
이 문제는 주어진 선에 의해 만들어진 선의 기울기를 비교하여 해결할 수 있습니다. 알다시피 (a1,b1)과 (a2,b2)가 이루는 직선의 기울기는 (b2-b1)/(a2-a1)입니다.
유사하게 우리는 주어진 배열에서 세 개의 점을 가지고 그들의 기울기를 비교할 수 있습니다. 3개의 점 중 2개의 선만 있으므로 그 중 2개는 같은 선에 있어야 합니다.
이를 위해 우리는 3개의 점을 취하고 그것들을 통한 절편을 계산할 것입니다. 절편에 대해 정확히 두 개의 다른 값을 얻는다면 배열의 점은 두 개의 평행선에 표시될 수 있으며 그렇지 않은 경우에는 표시되지 않습니다.
프로그램은 조건이 가능하면 1을 반환하고 그렇지 않으면 0을 반환합니다.
예시
#include <bits/stdc++.h> using namespace std; //to calculate if we get exactly two values of intercept bool is_intercept(double slope, int arr[], int num) { set<double> Lines; for (int i = 0; i < num; i++) Lines.insert(arr[i] - slope * (i)); return Lines.size() == 2; } //to check the slope of the given points bool is_parallel(int arr[], int num) { bool slope1 = is_intercept(arr[1] - arr[0], arr, num); bool slope2 = is_intercept(arr[2] - arr[1], arr, num); bool slope3 = is_intercept((arr[2] - arr[0]) / 2, arr, num); return (slope1 || slope2 || slope3); } int main() { int arr[] = {2,6,8,12,14}; int num = sizeof(arr)/sizeof(arr[0]); cout << (int)is_parallel(arr, num); return 0; }
출력
1