इस समस्या में, हमें दो संख्याएं n और sum दी गई हैं। हमें वे सभी n अंकों की संख्याएं प्रिंट करनी हैं जिनका योग दिए गए sum के बराबर हो। इस समस्या में, अग्रणी शून्य वाली संख्याओं पर विचार नहीं किया जाता है।
उदाहरण
Input: n = 2, sum = 5 Output: 14 23 32 41 50 Explanation: सभी संख्याओं में अंकों का योग 5 है।
इस समस्या को हल करने के लिए, हमें दिए गए योग मान के साथ सभी n-अंकीय संख्याएं ढूंढनी होंगी। इसके लिए, हम एक डिजिट स्थान को सभी मानों से फिक्स करेंगे और उसकी स्थिति के आधार पर सम या विषम होने पर, संख्या में अन्य स्थानों पर मानों के लिए कॉल करेंगे ताकि शर्त संतुष्ट रहे।
उदाहरण
उपरोक्त समाधान को लागू करने वाला प्रोग्राम:
#include <iostream>
using namespace std;
void PrintNumberWithDigitSum(int n, int sum, char* out, int index) {
if (index > n || sum < 0)
return;
if (index == n) {
if (sum == 0) {
out[index] = ' ';
cout << out << " ";
}
return;
}
for (int i = 0; i <= 9; i++) {
out[index] = i + '0';
PrintNumberWithDigitSum(n, sum - i, out, index + 1);
}
}
void numberWithSum(int n, int sum) {
char out[n + 1];
for (int i = 1; i <= 9; i++) {
out[0] = i + '0';
PrintNumberWithDigitSum(n, sum - i, out, 1);
}
}
int main() {
int n = 3, sum = 6;
cout << "All " << n << " digit numbers with sum " << sum << " are :\n";
numberWithSum(n, sum);
return 0;
}
आउटपुट
All 3 digit numbers with sum 6 are - 105 114 123 132 141 150 204 213 222 231 240 303 312 321 330 402 411 420 501 510 600