दिया गया कार्य है कि दी गई संख्या N के अंकों के फैक्टोरियल के गुणनफल के बराबर, उसके अपने अंकों के फैक्टोरियल के गुणनफल वाली अधिकतम संख्या ढूंढी जाए, जिसमें कोई अग्रणी या अनुगामी शून्य या एक न हो।
उदाहरण से समझते हैं
इनपुट - N = 4912
आउटपुट - 73332222
व्याख्या - 4! * 9! * 1! * 2! = 7! * 3! * 3! * 3! * 2! * 2! * 2! * 2! = 17,418,240
इनपुट - N = 340
आउटपुट - 3322
प्रयुक्त दृष्टिकोण
अधिकतम उत्तर प्राप्त करने के लिए, दी गई संख्या को अभाज्य संख्याओं के फैक्टोरियल के गुणनफल के रूप में व्यक्त करना होगा।
यदि दी गई संख्या में केवल शून्य और एक हैं तो आउटपुट ढूंढना संभव नहीं है।
MaxNum() फंक्शन में, total_digits टाइप का एक वेरिएबल बनाएं कुल अंकों की संख्या स्टोर करने के लिए और Frq[] = {0} नामक एक ऐरे आरंभ करें प्रत्येक आने वाली संख्या की फ्रीक्वेंसी स्टोर करने के लिए।
i=0 से i<total_digits तक लूप चलाएं और हर अंक के लिए चेक करें कि यह अभाज्य है या नहीं।
यदि वर्तमान अंक अभाज्य है, तो बस उस पोजीशन पर Frq[] ऐरे में 1 जोड़ें।
अन्यथा यदि अंक अभाज्य नहीं है, तो अलग-अलग if स्टेटमेंट से चेक करें कि यह 4, 6, 8 या 9 है या नहीं और फिर इसे इसके मूल अभाज्य फैक्टोरियल में तोड़ें और फ्रीक्वेंसी को तदनुसार बढ़ाएं।
अंतिम उत्तर स्टोर करने के लिए एक खाली स्ट्रिंग 'ans' बनाएं।
अंतिम चरण से पहले, चेक करें कि क्या संख्या में केवल एक और शून्य हैं। यदि हां, तो बस मूल स्ट्रिंग वापस करें अन्यथा अगले चरण पर जाएं।
i=9 से i>=2 तक लूप चलाएं। C = Frq[i] टाइप का एक वेरिएबल आरंभ करें और फॉर लूप के अंदर एक व्हाइल लूप बनाएं जिसकी शर्त while(C--) हो, जिसमें ans+=(char)(i+48) डालकर अंतिम उत्तर को स्ट्रिंग ans में स्टोर करें।
C++ प्रोग्राम उदाहरण
#include <bits/stdc++.h>
using namespace std;
string MaxNum(string str) {
int total_digits = str.length();
int Frq[15] = { 0 };
// हर अंक की फ्रीक्वेंसी प्राप्त करना
for (int i = 0; i < total_digits; i++) {
if (str[i] == '1' || str[i] == '2' || str[i] == '3' || str[i] == '5' || str[i] == '7') {
Frq[str[i] - 48] += 1;
}
// 4! = 2! * 2! * 3!
if (str[i] == '4') {
Frq[2] += 2;
Frq[3]++;
}
// 6! = 5! * 3!
if (str[i] == '6') {
Frq[5]++;
Frq[3]++;
}
// 8! = 7! * 2! * 2! * 2!
if (str[i] == '8') {
Frq[7]++;
Frq[2] += 3;
}
// 9! = 7! * 3! * 3! * 2!
if (str[i] == '9') {
Frq[7]++;
Frq[3] += 2;
Frq[2]++;
}
}
string ans = "";
// यदि संख्या में केवल 1 या 0 हैं
if (Frq[1] == total_digits || Frq[0] == total_digits || (Frq[0] + Frq[1]) == total_digits) {
return str;
} else {
// अधिकतम संभव संख्या
for (int i = 9; i >= 2; i--) {
int C = Frq[i];
while (C--) {
ans += (char)(i + 48);
}
}
return ans;
}
}
int main() {
string str = "340";
cout << MaxNum(str);
return 0;
}आउटपुट
3322