इस लेख में, हम यह पता लगाने के लिए एक कार्यक्रम पर चर्चा करेंगे कि क्या केवल दो समानांतर रेखाएं सभी दिए गए निर्देशांक बिंदुओं को धारण कर सकती हैं।
इसके लिए हमें एक सरणी दी जाएगी, जैसे कि निर्देशांक (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