C ++程序查找是否只有两条平行线包含所有坐标点
在本文中,我们将讨论一个程序,以确定是否只有两条平行线可以容纳所有给定的坐标点。
为此,我们将得到一个数组,以使坐标为(i,arr[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)。
同样,我们可以从给定数组中获得三个点,并比较它们的斜率。由于我们只有两条线,所以在三个点中,其中两个必须在同一条线上。
为此,我们将取三个点,并通过它们计算出截距线。如果我们恰好得到两个不同的截距值,则可以在两条平行线上表示数组中的点,否则不能。
如果条件允许,程序将返回1,否则返回0。
示例
#include <bits/stdc++.h> using namespace std; //计算我们是否恰好得到两个截距值 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; } //检查给定点的斜率 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