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