প্রদত্ত কাজটি হল কোন অগ্রণী বা অনুগামী শূন্য বা এমন সংখ্যা ছাড়াই সর্বাধিক সংখ্যা খুঁজে বের করা যার সংখ্যাগুলির গুণিতকের গুণফল প্রদত্ত সংখ্যা 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