मान लीजिए कि हमारे पास कई n अंक हैं। हमें वह अधिकतम संख्या ज्ञात करनी है जो उस संख्या के अंकों के सभी अंकों का प्रयोग करके प्राप्त की जा सकती है। अतः यदि संख्या 339625 कहें तो अधिकतम संख्या 965332 हो सकती है।
समस्या से, हम देख सकते हैं कि हम अंकों को गैर-बढ़ते क्रम में आसानी से सॉर्ट कर सकते हैं, फिर उन्हें प्रिंट कर सकते हैं। लेकिन हम इसे और अधिक कुशल तरीके से हल कर सकते हैं। हम प्रत्येक अंक की आवृत्ति को स्टोर करने के लिए आकार 10 की एक सरणी बना सकते हैं, फिर उसके अनुसार 9 से 0 तक की संख्याओं को प्रिंट कर सकते हैं।
उदाहरण
#include <iostream> #include <string> using namespace std; int maxNumFromNum(int num) { int freq[10] = {0}; string str = to_string(num); for (int i=0; i<str.length(); i++) freq[str[i]-'0']++; 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 num = 339625; cout << "Maximum number: " << maxNumFromNum(num); }
आउटपुट
Maximum number: 965332