ในปัญหานี้ เราได้รับตัวเลขสองตัว 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