इस समस्या में, हमें दो मान दिए गए हैं जो योग (अंकों के योग को दर्शाते हैं) और अंक (अंकों की संख्या को दर्शाते हुए) हैं। हमारा काम अंकों की दी गई संख्या और अंकों के योग के साथ सबसे छोटी संख्या को खोजना है।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट
sum = 15, dgiti = 2
आउटपुट
69
स्पष्टीकरण
15 के योग वाली सभी 2 अंकीय संख्याएँ हैं:69, 78, 87, 96।
समाधान दृष्टिकोण
इस समस्या का एक सरल समाधान है कि अंकों की संख्या वाली सभी संख्याओं को अंकों के रूप में मान लिया जाए और वह छोटी से छोटी संख्या ज्ञात की जाए जिसके अंकों का योग योग के बराबर हो।
एक कुशल समाधान लालची दृष्टिकोण का उपयोग कर रहा है। हम अंतिम अंक यानी संख्या के एलएसबी से तत्वों को भरकर संख्या बनाएंगे। हम एलएसबी के लिए सबसे बड़े संभावित तत्व पर विचार करेंगे और फिर अगली स्थिति के लिए जाएंगे।
हम एलएसबी को यथासंभव बड़ा और एमएसबी को यथासंभव छोटा रखने का प्रयास करेंगे।
हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,
उदाहरण
#include <iostream> using namespace std; void findSmallestNumWithSum(int digit, int sum) { if (sum == 0) { if(digit == 1) cout<<"Smallest number is 0"; else cout<<"Smallest number with sum cannot be found"; return ; } if (sum > 9*digit) { cout<<"Smallest number with sum cannot be found"; return ; } int number[digit]; sum -= 1; for (int i = digit-1; i>0; i--) { if (sum > 9) { number[i] = 9; sum -= 9; } else { number[i] = sum; sum = 0; } } number[0] = sum + 1; cout<<"Smallest number is "; for (int i=0; i<digit; i++) cout<<number[i]; } int main() { int sum = 15, digit = 3; findSmallestNumWithSum(digit, sum); return 0; }
आउटपुट
Smallest number is 159