在 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
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP