在 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

更新於: 22-Jan-2020

374 次觀看

開啟您的 職業生涯

完成課程獲得認證

開始
廣告