กำหนดจำนวนบวกเป็นจำนวนหลักและผลรวม เป้าหมายคือหาตัวเลข d หลักทั้งหมดที่มีผลรวมของหลักเท่ากับผลรวมอินพุต ตัวเลขที่มี leading zeros จะไม่ถูกพิจารณาว่าเป็นตัวเลข d หลัก
ช่วงคือ หลักระหว่าง 1 ถึง 100 และผลรวมระหว่าง 1 ถึง 500
ทำความเข้าใจด้วยตัวอย่าง
ตัวอย่าง
Input - digits = 3, digi_sum = 3
Output - จำนวนตัวเลข n หลักที่ผลรวมหลักเท่ากับค่าที่กำหนดคือ: 6
คำอธิบาย - ตัวเลข 3 หลักที่มีผลรวมหลักเป็น 3 คือ:
102, 111, 120, 201, 210, และ 300
Input - digits = 4, digi_sum = 2
Output - จำนวนตัวเลข n หลักที่ผลรวมหลักเท่ากับค่าที่กำหนดคือ: 4
คำอธิบาย - ตัวเลข 4 หลักที่มีผลรวมหลักเป็น 2 คือ:
1001, 1010, 1100, และ 2000
แนวทางที่ใช้ในโปรแกรมด้านล่าง
ในแนวทางนี้ เราจะเดินทางจากตัวเลข d หลักแรกและหาตัวเลขแรกที่ผลรวมของหลักเท่ากับผลรวมที่กำหนด จากนั้นเพิ่มตัวเลขทีละ 9 จนกว่าจะพบผลรวมของหลักมากกว่าผลรวมที่กำหนด เมื่อพบตัวเลขที่มีผลรวมหลักมากกว่าผลรวมอินพุต ให้เพิ่มตัวเลขทีละ 1 และหาตัวเลขถัดไปที่มีผลรวมเท่ากับผลรวมอินพุต ทำซ้ำกระบวนการนี้จนถึงตัวเลข d หลักสุดท้าย
- รับจำนวนหลักและผลรวมของหลักเป็นอินพุต
- ฟังก์ชัน digits_sum(int digits, int digi_sum) รับค่าอินพุตทั้งสองและคืนค่าจำนวนตัวเลข n หลักที่ผลรวมหลักเท่ากับผลรวมที่กำหนด
- ตั้งค่า count เริ่มต้นเป็น 0
- รับตัวเลขแรกเป็น Left = pow(10, digits - 1) และตัวเลขสุดท้ายของช่วงเป็น right = pow(10, digits) - 1 (เช่น 10 และ 99 สำหรับ digits = 2)
- ใช้ while loop เดินทางจาก left ถึง right
- รับ first = 0 และ last = i
- สำหรับแต่ละ i (last) รับหลักขวาสุด (last % 10) บวกเข้า first ลด last ลง 10 สำหรับรอบถัดไป
- ถ้า first เท่ากับ digi_sum เพิ่ม count และอัปเดต i เพิ่ม 9 สำหรับรอบถัดไป
- มิฉะนั้นเพิ่ม i ขึ้น 1
- ในท้ายที่สุดของลูปทั้งหมด เราจะได้ count เป็นตัวเลขที่มีผลรวมหลักเท่ากับ digi_sum
- คืนค่า count เป็นผลลัพธ์
ตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
int digits_sum(int digits, int digi_sum) {
int count = 0;
int Left = pow(10, digits - 1);
int right = pow(10, digits) - 1;
int i = Left;
while (i <= right) {
int first = 0;
int last = i;
while (last != 0) {
first = first + last % 10;
last = last / 10;
}
if (first == digi_sum) {
count++;
i = i + 9;
} else {
i++;
}
}
return count;
}
int main() {
int digits = 5;
int digi_sum = 7;
cout << "Count of n digit numbers whose sum of digits equals to given sum are: " << digits_sum(digits, digi_sum);
return 0;
}
หากเรารันโค้ดข้างต้น จะได้ผลลัพธ์ดังนี้
ผลลัพธ์
Count of n digit numbers whose sum of digits equals to given sum are: 5