Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình C ++ để tìm xem chỉ có hai đường thẳng song song chứa tất cả các điểm tọa độ hay không

Trong bài viết này, chúng ta sẽ thảo luận về một chương trình để tìm xem liệu chỉ hai đường thẳng song song có thể chứa tất cả các điểm tọa độ đã cho hay không.

Đối với điều này, chúng ta sẽ được cung cấp một mảng, sao cho tọa độ sẽ là (i, arr [i]). Giả sử chúng ta được cung cấp một mảng,

arr = {2,6,8,12,14}

Sau đó, chúng ta có thể có những điểm này trên hai đường thẳng song song, dòng đầu tiên chứa (1,2), (3,8) (5,14) . Dòng thứ hai có tọa độ còn lại, tức là (2,6) và (4,12).

Vấn đề này có thể được giải quyết bằng cách so sánh độ dốc của các đường được tạo bởi các đường đã cho. Như chúng ta đã biết, hệ số góc của đường thẳng tạo bởi (a1, b1) và (a2, b2) là (b2-b1) / (a2-a1).

Tương tự, chúng ta có thể có ba điểm từ mảng đã cho và so sánh độ dốc của chúng. Vì chúng ta chỉ có hai đường thẳng, nên trong số ba điểm, hai trong số chúng phải nằm trên cùng một đường thẳng.

Để làm điều này, chúng tôi sẽ lấy ba điểm và tính toán đường đánh chặn qua chúng tạo ra. Nếu chúng ta nhận được chính xác hai giá trị khác nhau của điểm chặn, thì các điểm trong mảng có thể được biểu diễn trên hai đường thẳng song song, nếu không thì không.

Chương trình trả về 1 nếu điều kiện là có thể, ngược lại là 0.

Ví dụ

#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;
}

Đầu ra

1