在本文中,我们将讨论一个程序,以确定是否只有两条平行线可以容纳所有给定的坐标点。
为此,我们将得到一个数组,以使坐标为(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