ให้ตัวเลข 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