इस ट्यूटोरियल में, हम एक प्रोग्राम लिखने जा रहे हैं जो दिए गए दो बिंदुओं के बीच इंटीग्रल पॉइंट्स की संख्या का पता लगाता है।
दिए गए दो बिंदुओं के बीच अंकों की संख्या होगी gcd(abs(x2), abs(y1-y2)) - 1.
यदि मिलाने वाली रेखा x-अक्ष के समानांतर है, तो समाकलन बिंदुओं की संख्या होगी abs(y1 - y2) - 1.
यदि मिलाने वाली रेखा y-अक्ष के समानांतर है, तो अभिन्न बिंदुओं की संख्या होगी abs(x1 - x2) - 1
यदि दोनों बिंदुओं के x बिंदु बराबर हैं, तो वे x-अक्ष के समानांतर हैं। यदि दोनों बिंदुओं के y बिंदु समान हैं, तो वे y-अक्ष के समानांतर हैं।
आइए एक उदाहरण देखें।
इनपुट
pointOne = [1, 5] pointTwo = [1, 3]
आउटपुट
1
एल्गोरिदम
- दो बिंदुओं को प्रारंभ करें।
- जांचें कि वे x-अक्ष के समानांतर हैं या नहीं।
- यदि वे x-अक्ष के समानांतर हैं, तो सूत्र abs(y1 - y2) - 1. का उपयोग करें।
- जांचें कि वे y-अक्ष के समानांतर हैं या नहीं।
- यदि वे y-अक्ष के समानांतर हैं, तो सूत्र abs(x1 - x2) - 1. का उपयोग करें।
- यदि वे किसी भी अक्ष के समानांतर नहीं हैं, तो सूत्र gcd(abs(x1-x2), abs(y1- y2)) - 1. का उपयोग करें।
- परिणाम की गणना करें और उसका प्रिंट लें।
कार्यान्वयन
C++ में उपरोक्त एल्गोरिथम का कार्यान्वयन निम्नलिखित है
#include <bits/stdc++.h> using namespace std; int gcd(int a, int b) { if (b == 0) { return a; } return gcd(b, a % b); } int getCount(int pointOne[], int pointTwo[]) { if (pointOne[0] == pointTwo[0]) { return abs(pointOne[1] - pointTwo[1]) - 1; } if (pointOne[1] == pointTwo[1]) { return abs(pointOne[0] - pointTwo[0]) - 1; } return gcd(abs(pointOne[0] - pointTwo[0]), abs(pointOne[1] - pointTwo[1])) - 1; } int main() { int pointOne[] = {1, 3}, pointTwo[] = {10, 12}; cout << getCount(pointOne, pointTwo) << endl; return 0; }
आउटपुट
यदि आप उपरोक्त कोड चलाते हैं, तो आपको निम्न परिणाम प्राप्त होंगे।
8