প্রদত্ত কাজটি হল কোন অগ্রণী বা অনুগামী শূন্য বা এমন সংখ্যা ছাড়াই সর্বাধিক সংখ্যা খুঁজে বের করা যার সংখ্যাগুলির গুণিতকের গুণফল প্রদত্ত সংখ্যা N এর সংখ্যাগুলির ফ্যাক্টোরিয়ালের গুণফলের সমান।
আসুন এখন বুঝতে পারি −
একটি উদাহরণ ব্যবহার করে আমাদের কী করতে হবেইনপুট − N =4912
আউটপুট − 73332222
ব্যাখ্যা − 4! *9! *১! *2! =7! *3! *3! *3! *2! *2! *2! *2! =17,418,240
ইনপুট − N =340
আউটপুট − 3322
নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি
-
সর্বোচ্চ উত্তর পাওয়ার জন্য আমাদের প্রদত্ত সংখ্যাটিকে মৌলিক সংখ্যার ফ্যাক্টরিয়ালের গুণফল হিসাবে প্রকাশ করতে হবে।
যদি প্রদত্ত সংখ্যাটিতে শুধুমাত্র শূন্য এবং একটি থাকে তবে একটি আউটপুট খুঁজে পাওয়া সম্ভব নয়।
-
ফাংশনে MaxNum() সংখ্যার মোট সংখ্যা সংরক্ষণ করতে int-এর একটি পরিবর্তনশীল total_digits তৈরি করুন এবং প্রতিটি সংঘটিত সংখ্যার ফ্রিকোয়েন্সি সংরক্ষণ করার জন্য Frq[] ={0} টাইপের আরেকটি অ্যারে শুরু করুন।
-
i=0 থেকে i
-
যদি বর্তমান অঙ্কটি প্রাইম হয়, তাহলে বিন্যাসের Frq[] অবস্থানে 1 যোগ করুন।
-
ডিজিটের অন্য অংশটি প্রাইম নয়, তারপর আলাদা ইফ স্টেটমেন্টের মাধ্যমে চেক করুন যে এটি হয় 4, 6, 8 বা 9 এবং তারপরে এটিকে এর মৌলিক মৌলিক ফ্যাক্টরিয়ালগুলিতে ভেঙে দিন এবং সেই অনুযায়ী ফ্রিকোয়েন্সি বৃদ্ধি করুন।
-
চূড়ান্ত উত্তর সংরক্ষণ করতে একটি খালি স্ট্রিং 'উত্তর' তৈরি করুন।
-
চূড়ান্ত ধাপে যাওয়ার আগে, সংখ্যাটিতে শুধুমাত্র একটি এবং শূন্য রয়েছে কিনা তা পরীক্ষা করুন। যদি তাই হয় তবে কেবল আসল স্ট্রিংটি ফিরিয়ে দিন অন্যথায় পরবর্তী ধাপে যান৷
-
i=9 থেকে i>=2 পর্যন্ত লুপ। int-এর একটি ভেরিয়েবল C =Frq[i] টাইপ শুরু করুন এবং for loop-এর ভিতরে কন্ডিশন সহ একটি while লুপ তৈরি করুন যখন (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