Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Đếm số trong khoảng có hiệu với tổng chữ số lớn hơn giá trị cho trước trong C++


Cho hai số N xác định khoảng [1, N] và D là một hiệu số. Mục tiêu là tìm tất cả các số trong khoảng [1, N] sao cho [số - (tổng chữ số của nó)] > D. Ta thực hiện bằng cách duyệt số từ 1 đến N và với mỗi số tính tổng chữ số bằng vòng lặp while. Kiểm tra nếu hiệu giữa số và tổng chữ số tính được lớn hơn D.

Hãy hiểu qua các ví dụ.

Đầu vào

N=15 D=5

Đầu ra

Số thỏa mãn hiệu số - tổng chữ số > D: 6

Giải thích

Các số 10, 11, 12, 13, 14, 15 thỏa mãn. (10-1, 11-2, 12-3, 13-4, 14-5, 15-6) tất cả hiệu đều là 9 lớn hơn 5.

Đầu vào

N=20 D=10

Đầu ra

Chỉ 20 thỏa mãn. 20-2=18 > 10.

Giải thích

Danh sách số chia hết cho tất cả chữ số khác 0: 100 101 102 104 105 110 111 112 115 120 122 124 126 128 132 135 140 144 150 155 162 168 175 184 200

Phương pháp sử dụng trong chương trình dưới đây

  • Nhận số nguyên N và D.
  • Hàm digitSum(int n, int d) nhận N, D và trả về số lượng số có (num - digsum) > d.
  • Khởi tạo biến count = 0 cho các số như vậy.
  • Biến digsum = 0.
  • Duyệt khoảng số bằng vòng lặp for. i=1 đến i=n.
  • Với mỗi số num=i, dùng vòng lặp while kiểm tra số > 0.
  • Tính digsum += num%10. Giảm num = num/10 để lấy chữ số tiếp theo.
  • Sau while, kiểm tra nếu (i - digsum > d). Nếu đúng tăng count.
  • Sau tất cả vòng lặp count chứa tổng số thỏa mãn điều kiện.
  • Trả về count làm kết quả.

Ví dụ

#include <bits/stdc++.h>
using namespace std;

int digitSum(int n, int d) {
    int count = 0;
    int digsum = 0;
    for (int i = 1; i <= n; i++) {
        int num = i;
        digsum = 0;
        while(num > 0) {
            digsum += num % 10; // tổng chữ số
            num = num / 10;
        }
        if(i - digsum > d) { // số gốc là i
            count++;
            // cout << i << " ";
        }
    }
    return count;
}

int main() {
    int N = 20;
    int D = 8;
    cout << "Số thỏa mãn hiệu số - tổng chữ số > giá trị cho trước: " << digitSum(N, D);
    return 0;
}

Đầu ra

Nếu chạy mã trên sẽ cho kết quả sau:

Số thỏa mãn hiệu số - tổng chữ số > giá trị cho trước: 11