在 C++ 中列印所有數字和給定和相等的 n 位數
在這個問題中,我們得到了兩個數字n和sum。我們必須打印出所有n位數,其和等於sum。在此問題中,不考慮有前導0的數字。
我們舉個例子來理解這個問題,
Input: n = 2 , sum = 5 Output: 14 23 32 41 50 Explanation: The sum of digits of the number in all numbers in 5.
為了解決這個問題,我們必須找出所有n位數,其和等於給定的sum值。為此,我們將根據其位置是否為偶數或奇數,使用所有值修復一個數字位置並呼叫數字中其他位置的值,以便該條件仍然滿足。
示例
實現上述解決方案的程式 −
#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
廣告