এই সমস্যায়, আমাদের দুটি পূর্ণসংখ্যার মান দেওয়া হয়েছে, N একটি সংখ্যার অঙ্কের গণনা নির্দেশ করে এবং যোগফল সংখ্যাটির অঙ্কের যোগফলকে নির্দেশ করে। আমাদের কাজ হল প্রদত্ত সংখ্যা এবং অঙ্কের যোগফল সহ সবচেয়ে বড় সংখ্যাটি খুঁজে বের করা .
সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,
Input : N = 3, sum = 15 Output : 960
সমাধান পদ্ধতি
সমস্যা সমাধানের একটি সহজ পন্থা হল বৃহত্তম থেকে ক্ষুদ্রতম পর্যন্ত সমস্ত N সংখ্যা সংখ্যা অতিক্রম করে। অঙ্কের যোগফল সংখ্যাগুলি খুঁজুন, যদি এটি যোগফলের সমান হয় তাহলে সংখ্যাটি ফেরত দিন।
উদাহরণ
আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম
#include <iostream> using namespace std; int digitSum(int n){ int sum = 0; while(n){ sum += n%10; n = n/10; } return sum; } int findLargestNumWithSum(int N, int sum){ if (sum == 0){ if(N == 1) return -1; else return -1; } if (sum > 9*N){ return -1; } int num = 1; for(int i = 0; i < N; i++) num *= 10; while(1){ if(digitSum(num) == sum){ return num; } num -- ; if(num == 0) return -1; } } int main(){ int sum = 25, N = 3; cout<<"The largest "<<N<<" digit number with sum "<<sum<<" is "<< findLargestNumWithSum(N, sum); return 0; }
আউটপুট
The largest 3 digit number with sum 25 is 997
সমস্যা সমাধানের আরেকটি পদ্ধতি হল লোভী দৃষ্টিভঙ্গি ব্যবহার করে। আমরা এটি করব MSB থেকে শুরু করে, যোগফল থেকে সর্বোচ্চ সম্ভাব্য সংখ্যা বসিয়ে এবং যোগফল থেকে বিয়োগ করে।
আমরা N বারের জন্য এই পদক্ষেপটি সম্পাদন করব, আমরা প্রয়োজনীয় নম্বর পাব। সুতরাং, যদি যোগফল 9-এর বেশি হয়, বর্তমান অঙ্কে 9 বসান, যদি এটি 9-এর কম হয়, তাহলে বর্তমান অঙ্কে যোগফল বসান। MSB থেকে LSB পর্যন্ত সমস্ত অঙ্কের জন্য এই প্রক্রিয়াটি করুন৷
৷উদাহরণ
আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম
#include <iostream> using namespace std; int findLargestNumWithSum(int N, int sum){ if (sum == 0){ if(N == 1) return -1; else return -1; } if (sum > 9*N){ return -1; } int num = 0; for (int i = 0; i < N; i++){ if (sum >= 9){ num += 9; sum -= 9; if(i < (N - 1)){ num *= 10; } } else{ num += sum; sum = 0; if( i < (N - 1)) num *= 10; } } return num; } int main(){ int sum = 25, N = 3; cout<<"The largest "<<N<<" digit number with sum "<<sum<<" is "<<findLargestNumWithSum(N, sum); return 0; }
আউটপুট
The largest 3 digit number with sum 25 is 997