इस समस्या में, हमें एक 2-डी सरणी दी जाती है जिसमें परिमेय संख्याएँ होती हैं (प्रत्येक पंक्ति में एक)। हमारा कार्य C++ में किसी सरणी से अधिकतम परिमेय संख्या (या भिन्न) की गणना करने के लिए एक प्रोग्राम बनाना है।
समस्या का विवरण - 2-डी सरणी [n][2] के रूप में है। प्रत्येक पंक्ति में दो पूर्णांक मान होते हैं जो परिमेय संख्या, a/b के समीकरण में a और b के मान को दर्शाते हैं। हमें इन सभी परिमेय संख्याओं में से सबसे बड़ी संख्या ज्ञात करनी है।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट
rat[][] = { {3, 2}, {5, 7}, {1, 9}, {11, 4} }
आउटपुट
11 4
स्पष्टीकरण
में से अधिकतम संख्या
3/2 , 5/7 , 1/9 , 11/4 is 11/4.
समाधान दृष्टिकोण
समस्या को हल करने के लिए, हमें संख्याओं के मूल्यों को खोजने और फिर उनके मूल्यों की तुलना करने की आवश्यकता है। लेकिन, यह एक त्रुटि दे सकता है यदि परिशुद्धता के बीच का अंतर अधिक है, जैसे यदि हम फ्लोट का उपयोग करते हैं तो हम तर्कसंगत संख्याओं, 34.12313431123, और 34.12313431124 के बीच अंतर नहीं कर सकते हैं।
इसलिए, हम मूल्यों की तुलना करने के लिए एक अन्य विधि का उपयोग करेंगे। यह सभी हरों के एलसीएम का उपयोग कर रहा है और फिर उसके अनुसार अंशों को बदल रहा है। इसके बाद, अंशों की तुलना अधिकतम संख्या लौटाएगी।
हमारे समाधान के कार्यान्वयन को दिखाने के लिए कार्यक्रम,
उदाहरण
#include <bits/stdc++.h> using namespace std; const int n = 4; int findMaxRatNum(int ratNum[n][2]){ int numArray[n]; int LCM = 1; int mavVal = 0, index = 0; for (int i = 0; i < n; i++) LCM = (LCM * ratNum[i][1]) / __gcd(LCM, ratNum[i][1]); for (int i = 0; i < n; i++) { numArray[i] = (ratNum[i][0]) * (LCM / ratNum[i][1]); if (mavVal < numArray[i]) { mavVal = numArray[i]; index = i; } } return index; } int main(){ int ratNum[n][2] = {{3, 2},{5, 7},{1, 9},{11, 4}}; int i = findMaxRatNum(ratNum); cout<<"The maximum rational number from an array is "<<ratNum[i][0]<<"/"<<ratNum[i][1]; }
आउटपुट
The maximum rational number from an array is 11/4