กำหนดตัวเลข N เป็นอินพุต เป้าหมายคือหาตัวเลข m จนถึง N ที่สอดคล้องเงื่อนไขต่อไปนี้ โดย N <= 109
m + sum(m) + sum(sum(m)) = N โดยที่ sum(m) คือผลรวมของหลักของ m
ถ้า m คือ 137 แล้ว sum(m) = 1+3+7 = 11 และ sum(sum(m)) = sum(11) = 1+1 = 2
ทำความเข้าใจด้วยตัวอย่าง
ตัวอย่าง
Input - N = 27
Output - จำนวนตัวเลขที่สอดคล้อง m + sum(m) + sum(sum(m)) = N คือ: 3
คำอธิบาย - ตัวเลขคือ:
9 (9 + 9 + 9 = 27)
15 (15 + (1+5) + 6 = 27)
21 (21 + (2+1) + 3 = 27)
Input - N = 81
Output - จำนวนตัวเลขที่สอดคล้อง m + sum(m) + sum(sum(m)) = N คือ: 2
คำอธิบาย - ตัวเลขคือ:
63 (63 + (6+3) + 9 = 81)
66 (66 + (6+6) + (1+2) = 81)
แนวทางที่ใช้ในโปรแกรมด้านล่าง
ในแนวทางนี้ เราจะคำนวณผลรวมของหลักของตัวเลขและเปรียบเทียบผลรวมที่บวกกันกับ N ถ้าผลรวมที่คำนวณได้เท่ากับ N ให้เพิ่ม count ในที่สุดคืนค่า count เป็นผลลัพธ์
เนื่องจากตัวเลขสูงสุดอาจเป็น 109 ผลรวมของหลักสูงสุดของ m สามารถเป็น 81 (9*9) และผลรวมของหลักสูงสุดต่อไปสำหรับ sum(sum(m)) สามารถเป็น 16 (7+9 สำหรับ 79) ดังนั้นเราจะตรวจสอบตัวเลขจาก N-97 ถึง N เนื่องจากจำนวนเต็มที่น้อยกว่า N-97 และมากกว่า N จะไม่สอดคล้องเงื่อนไขที่กำหนด
- รับจำนวนเต็ม N เป็นอินพุต
- ฟังก์ชัน total(int num) รับตัวเลขและคืนค่าผลรวมของหลัก
- รับ res_total เป็นผลรวมของหลักและ res เป็นเศษปัจจุบัน เริ่มต้นทั้งคู่เป็น 0
- เดินทางผ่านแต่ละหลักหน่วยด้วยลูป while
- รับหลักหน่วยเป็น res = num % 10 และบวกเข้า res_total
- ลด num ลง 10 สำหรับหลักถัดไป
- คืนค่า res_total เป็นผลรวมของหลักของ num ในที่สุด
- ฟังก์ชัน condition(int N) รับ N และคืนค่าจำนวนตัวเลขที่สอดคล้อง m + sum(m) + sum(sum(m))
- ตั้งค่า count เริ่มต้นเป็น 0
- วนลูป for จาก i = N-97 ถึง i <= N
- คำนวณผลรวมของหลักเป็น temp_1 = total(i)
- คำนวณผลรวมของหลักของ total(i) เป็น total(temp_1)
- ตั้ง temp_3 = i + temp_1 + temp_2 ถ้าเท่ากับ N เพิ่ม count
- ในท้ายที่สุดของ for loop คืนค่า count เป็นผลลัพธ์
ตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
int total(int num) {
int res_total = 0;
int res = 0;
while (num > 0) {
res = num % 10;
res_total = res_total + res;
num = num / 10;
}
return res_total;
}
int condition(int N) {
int count = 0;
for (int i = N - 97; i <= N; i++) {
int temp_1 = total(i);
int temp_2 = total(temp_1);
int temp_3 = i + temp_1 + temp_2;
if (temp_3 == N) {
count++;
}
}
return count;
}
int main() {
int N = 9999;
cout << "Count of numbers satisfying m + sum(m) + sum(sum(m)) = N are: " << condition(N);
return 0;
}
หากเรารันโค้ดข้างต้น จะได้ผลลัพธ์ดังนี้
ผลลัพธ์
Count of numbers satisfying m + sum(m) + sum(sum(m)) = N are: 2