打印所有位数等于C中给定总和的n位数字

在这个问题上,我们给了两个数字n和sum。我们必须打印总和等于总和的所有n位数字。在此问题中,不考虑前导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位数字。为此,我们将固定一个具有所有值的数字位置,并根据其位置是偶数还是奇数,在数字的其他位置处调用值,以保持条件满足。

示例

实施上述解决方案的程序-

#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

以上是 打印所有位数等于C中给定总和的n位数字 的全部内容, 来源链接: utcz.com/z/356283.html

回到顶部