Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม 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