Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

พิมพ์ตัวเลข n หลักทั้งหมดที่มีผลรวมของหลักเท่ากับผลรวมที่กำหนดใน C++


ในปัญหานี้ เราได้รับตัวเลขสองตัว n และผลรวม เราต้องพิมพ์ตัวเลข 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