Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

นับตัวเลขที่สอดคล้อง m + sum(m) + sum(sum(m)) = N ใน C++

กำหนดตัวเลข 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