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;
//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

更新於:2019年10月3日

307 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.