এই সমস্যায়, আমাদেরকে সংখ্যার একটি অ্যারে দেওয়া হয়েছে এবং আমাদের সবচেয়ে বড় মান খুঁজে বের করতে হবে যা একটি নির্দিষ্ট উপায়ে পরিবর্তন করে তৈরি করা যেতে পারে। বিন্যাসের শর্ত হল, জোড় সংখ্যা এবং বিজোড় সংখ্যার ক্রম একই থাকবে অর্থাৎ সমস্ত জোড় সংখ্যার ক্রম পরিবর্তন করা যাবে না।
ধারণাটি আরও ভালভাবে বোঝার জন্য একটি উদাহরণ নেওয়া যাক,
Input : {17, 80, 99, 27, 14 , 22} Output: 801799271422 Explanation: the order of Even and Odd numbers is : Even : 80 14 22 Odd : 17 99 27
এখানে 99 হল সবচেয়ে বড় সংখ্যা কিন্তু বিজোড় সংখ্যার ক্রম অনুসারে 17 এর আগে আসে তাই আমরা প্রথমে 80 বিবেচনা করেছি এবং তারপর ক্রমানুসারে বিন্যাসের ক্রম তৈরি করেছি যেমন − 80 17 99 27 14 22
যেহেতু আমরা সমস্যাটি বুঝতে পেরেছি, আসুন এর জন্য একটি সমাধান তৈরি করার চেষ্টা করি। এখানে আমরা সমান এবং বিজোড়ের ক্রম সম্পর্কে একটি সীমাবদ্ধতা হিসাবে ক্লাসিক্যাল অবরোহ ক্রমে যেতে পারি না। সুতরাং আমাদের এই ক্রমটি বজায় রাখতে হবে এবং জোড় এবং বিজোড় আদেশের প্রথম উপাদানগুলির মধ্যে সবচেয়ে বড়টি ঠিক আছে কিনা তা পরীক্ষা করতে হবে। এবং তারপর যে মত যান. আসুন একটি অ্যালগরিদম দেখি যা এটিকে আরও স্পষ্ট করবে।
অ্যালগরিদম
Step 1 : Create two structures, one for even other for odd, this will maintain the sequence. Step 2 : Take one element from each structure and check which combination makes a large number. Example, if E is the even number and O is the odd number which are at the top of the structure. then we will check which one is Greater of EO and OE. Step 3 : Place the greater combination into the final sequence. Step 4 : Print the final sequence.
উদাহরণ
এখন, এই অ্যালগরিদমের উপর ভিত্তি করে একটি প্রোগ্রাম তৈরি করা যাক।
#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