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

จำนวนตัวเลขที่ตรงตาม m + sum(m) + sum(sum(m)) =N ใน C++


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