इस समस्या में, हमें दो पूर्णांक मान दिए गए हैं, N एक संख्या के अंकों की संख्या को दर्शाता है और योग संख्या के अंकों के योग को दर्शाता है। हमारा काम है दिए गए अंकों की संख्या और अंकों के योग के साथ सबसे बड़ी संख्या का पता लगाना ।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
Input : N = 3, sum = 15 Output : 960
समाधान दृष्टिकोण
समस्या को हल करने का एक सरल तरीका सभी एन अंकों की संख्याओं को सबसे बड़ी से सबसे छोटी तक ले जाना है। अंक योग संख्याएं खोजें, यदि यह योग के बराबर है तो संख्या लौटाएं।
उदाहरण
हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम
#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