इस समस्या में, हमें संख्याओं का एक ऐरे दिया जाता है और हमें एक निश्चित तरीके से उन्हें बदलकर बनाई जा सकने वाली सबसे बड़ी वैल्यू ढूंढनी होती है। व्यवस्था की शर्त यह है कि सम और विषम संख्याओं का क्रम समान रहना चाहिए यानी सभी सम संख्याओं का क्रम नहीं बदला जा सकता।
आइए एक उदाहरण लेकर इस अवधारणा को बेहतर ढंग से समझते हैं:
इनपुट: {17, 80, 99, 27, 14, 22}
आउटपुट: 801799271422
व्याख्या: सम और विषम संख्याओं का क्रम है:
सम: 80 14 22
विषम: 17 99 27 यहां 99 सबसे बड़ी संख्या है लेकिन विषम संख्याओं के क्रम में 17 इससे पहले आता है इसलिए हमने पहले 80 पर विचार किया और फिर व्यवस्था का क्रम क्रमिक रूप से इस तरह बनाया: 80 17 99 27 14 22
चूंकि हमने समस्या को समझ लिया है, आइए इसका समाधान उत्पन्न करने का प्रयास करें। यहां हम शास्त्रीय अवरोही क्रम के लिए नहीं जा सकते क्योंकि सम और विषम के क्रम के बारे में एक प्रतिबंध परिभाषित है। इसलिए हमें इस क्रम को बनाए रखना होगा और सम और विषम क्रम के पहले एलिमेंट्स में से बड़े की जांच करनी होगी। और फिर उसी तरह आगे बढ़ें। आइए एक एल्गोरिदम देखें जो इसे और स्पष्ट करेगा।
एल्गोरिदम
चरण 1: दो संरचनाएं बनाएं, एक सम के लिए दूसरी विषम के लिए, यह क्रम को बनाए रखेगा। चरण 2: प्रत्येक संरचना से एक एलिमेंट लें और जांचें कि कौन सा संयोजन बड़ी संख्या बनाता है। उदाहरण के लिए, यदि E सम संख्या है और O विषम संख्या है जो संरचना के शीर्ष पर हैं। फिर हम जांचेंगे कि EO और OE में से कौन बड़ा है। चरण 3: बड़े संयोजन को अंतिम अनुक्रम में रखें। चरण 4: अंतिम अनुक्रम प्रिंट करें।
उदाहरण
अब, आइए इस एल्गोरिदम पर आधारित एक प्रोग्राम बनाते हैं।
#include <bits/stdc++.h>
using namespace std;
string merge(vector<string> arr1, vector<string> arr2) {
int n1 = arr1.size();
int n2 = arr2.size();
int i = 0, j = 0;
string big = "";
while (i < n1 && j < n2) {
if ((arr1[i] + arr2[j]).compare((arr2[j] + arr1[i])) > 0)
big += arr1[i++];
else
big += arr2[j++];
}
while (i < n1)
big += arr1[i++];
while (j < n2)
big += arr2[j++];
return big;
}
string largestNumber(vector<string> arr, int n) {
vector<string> even, odd;
for (int i = 0; i < n; i++) {
int lastDigit = arr[i].at(arr[i].size() - 1) - '0';
if (lastDigit % 2 == 0)
even.push_back(arr[i]);
else
odd.push_back(arr[i]);
}
string biggest = merge(even, odd);
return biggest;
}
int main() {
vector<string> arr;
arr.push_back("17");
arr.push_back("80");
arr.push_back("99");
arr.push_back("27");
arr.push_back("14");
arr.push_back("22");
int n = arr.size();
cout << "Biggest possible number from the array is = " << largestNumber(arr, n);
return 0;
} आउटपुट
Biggest possible number from the array is = 801799271422