ให้ตัวเลข N เป็นอินพุต เป้าหมายคือการหาตัวเลข m ไม่เกิน N ที่ตรงตามเงื่อนไขต่อไปนี้ ที่นี่ N<=10 9
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
ให้เราเข้าใจด้วยตัวอย่าง
ตัวอย่าง
ป้อนข้อมูล - N=27
ผลลัพธ์ - จำนวนตัวเลขที่ตรงตาม 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 )
ป้อนข้อมูล - N=81
ผลลัพธ์ - จำนวนตัวเลขที่ตรงตาม m + sum(m) + sum(sum(m)) =N คือ:2
คำอธิบาย - ตัวเลขคือ:
63 ( 63 + (6+3) + 9 =81 )
66 ( 66 + (6+6) + (1+2) =81 )
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
ในแนวทางนี้ เราจะคำนวณผลรวมของตัวเลขและเปรียบเทียบผลรวมที่บวกกับ N หากผลรวมที่คำนวณได้เท่ากับ N ให้นับการเพิ่มขึ้น เมื่อสิ้นสุดผลตอบแทนนับเป็นผลลัพธ์
เนื่องจากจำนวนที่มากที่สุดอาจเป็น 10 9 ผลรวมสูงสุดของหลัก m สามารถเป็น 81 ( 9*9 ) และผลรวมสูงสุดของหลักถัดไปสำหรับ sum(sum(m)) คือ 16 ( 7+9 สำหรับ 79 ) ดังนั้นเราจะตรวจสอบตัวเลขตั้งแต่ N-97 ถึง N เนื่องจากจำนวนเต็มที่น้อยกว่า N-97 และมากกว่า N จะไม่เป็นไปตามเงื่อนไขที่กำหนด
- นำจำนวนเต็ม N เป็นอินพุต
- Function total(int num) รับผลรวมของตัวเลขและส่งกลับผลรวมของตัวเลข
- ใช้ res_total เป็นผลรวมของตัวเลขและ res เป็นส่วนที่เหลือปัจจุบัน เริ่มต้นทั้งคู่ด้วย 0
- สำรวจแต่ละหลักหน่วยโดยใช้ while loop
- ใช้หลักหน่วยเป็น res=num % 10 และเพิ่มใน res_total
- ลด num ลง 10 สำหรับหลักถัดไป
- คืนค่า res_total เป็นผลรวมของตัวเลขที่ส่วนท้าย
- เงื่อนไขของฟังก์ชัน(int N) รับ N และส่งกลับจำนวนตัวเลขที่ตรงตาม m + sum(m) + sum(sum(m))
- นับเริ่มต้นเป็น 0
- สำรวจโดยใช้ for loop จาก i=N-97 ถึง i<=N.
- คำนวณผลรวมของหลักเป็น temp_1=total(i)
- คำนวณผลรวมของจำนวนหลักทั้งหมด (i) เป็นยอดรวม (temp_1)
- ตั้งค่า temp_3 =i + temp_1 + temp_2 หากเท่ากับ N ให้นับการเพิ่มขึ้น
- ที่ส่วนท้ายของ for loop return นับเป็นผลลัพธ์
ตัวอย่าง
#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