Computer >> Máy Tính >  >> Lập trình >> C ++

Đếm số thỏa mãn m + sum (m) + sum (sum (m)) =N trong C ++

Cho một số N làm đầu vào. Mục đích là tìm các số từ m đến N thỏa mãn điều kiện sau. Đây N <=10 9

m + sum (m) + sum (sum (m)) =N. Trong đó tổng (m) là tổng các chữ số của m.

Nếu m là 137 thì sum (m) =1 + 3 + 7 =11 và sum (sum (m)) =sum (11) =1 + 1 =2

Hãy cho chúng tôi hiểu với các ví dụ.

Ví dụ

Đầu vào - N =27

Đầu ra - Đếm các số thỏa mãn m + sum (m) + sum (sum (m)) =N là:3

Giải thích - Các con số là:

9 (9 + 9 + 9 =27)

15 (15 + (1 + 5) + (6) =27)

21 (21 + (2 + 1) + (3) =27)

Đầu vào - N =81

Đầu ra - Đếm các số thỏa mãn m + sum (m) + sum (sum (m)) =N là:2

Giải thích - Các con số là:

63 (63 + (6 + 3) + 9 =81)

66 (66 + (6 + 6) + (1 + 2) =81)

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

Trong cách tiếp cận này, chúng ta sẽ tính tổng các chữ số của các số và so sánh các tổng cộng với N. Nếu tổng được tính bằng N thì tính tăng dần. Kết quả là cuối cùng trả về.

Vì con số lớn nhất có thể là 10 9 thì tổng các chữ số lớn nhất của m có thể là 81 (9 * 9) và tổng các chữ số lớn nhất tiếp theo của tổng (tổng (m)) có thể là 16 (7 + 9 cho 79). Vì vậy, chúng tôi sẽ kiểm tra các số từ N-97 đến N là số nguyên nhỏ hơn N-97 và lớn hơn N sẽ không thỏa mãn điều kiện cho trước.

  • Lấy số nguyên N làm đầu vào.
  • Hàm tổng (int num) nhận tổng một số và trả về tổng các chữ số của nó.
  • Lấy res_total làm tổng các chữ số và res là phần dư hiện tại. Khởi tạo cả hai bằng 0.
  • Duyệt qua từng chữ số hàng đơn vị bằng vòng lặp while.
  • Lấy chữ số hàng đơn vị là res =num% 10 và thêm vào res_total.
  • Giảm số đi 10 cho chữ số tiếp theo.
  • Trả về res_total dưới dạng tổng các chữ số của num ở cuối.
  • Điều kiện hàm (int N) nhận N và trả về số đếm các số thỏa mãn m + sum (m) + sum (sum (m)).
  • Lấy số lượng ban đầu là 0.
  • Đảo ngược bằng vòng lặp for từ i =N-97 đến i <=N.
  • Tính tổng các chữ số dưới dạng temp_1 =total (i).
  • Tính tổng các chữ số của tổng (i) dưới dạng tổng (temp_1).
  • Đặt temp_3 =i + temp_1 + temp_2. Nếu nó bằng N thì số gia tăng.
  • Kết quả là số lượng trả về ở cuối vòng lặp for.

Ví dụ

#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;
}

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Đầu ra

Count of numbers satisfying m + sum(m) + sum(sum(m)) = N are: 2