মনে করুন আমাদের অঙ্কগুলোর একটি অ্যারে আছে। আমাদের অ্যারেতে সব অঙ্ক ব্যবহার করে সর্বোচ্চ সংখ্যা বের করতে হবে। তাই যদি অ্যারেটি হয় [3, 3, 9, 6, 2, 5], তবে সর্বোচ্চ সংখ্যা হতে পারে 965332।
সমস্যাটি থেকে আমরা দেখতে পাচ্ছি যে আমরা সহজে অঙ্কগুলোকে নন-ইনক্রিজিং অর্ডারে সর্ট করে প্রিন্ট করতে পারি। কিন্তু আমরা আরও কার্যকরভাবে এটি সমাধান করতে পারি। আমরা আকার ১০-এর একটি অ্যারে তৈরি করতে পারি প্রতিটি অঙ্কের ফ্রিকোয়েন্সি সংরক্ষণ করতে, তারপর ৯ থেকে ০ পর্যন্ত সংখ্যা প্রিন্ট করব।
উদাহরণ
#include <iostream>
#include <string>
using namespace std;
int maxNumFromNum(int arr[], int n) {
int freq[10] = {0};
for (int i = 0; i < n; i++)
freq[arr[i]]++;
int res = 0, mul = 1;
for (int i = 0; i <= 9; i++) {
while (freq[i] > 0) {
res = res + (i * mul);
freq[i]--;
mul = mul * 10;
}
}
return res;
}
int main() {
int digits[] = {3, 3, 9, 6, 2, 5};
int n = sizeof(digits) / sizeof(digits[0]);
cout << "Maximum number: " << maxNumFromNum(digits, n);
}
আউটপুট
Maximum number: 965332