Cho một số dương là số chữ số và một tổng. Mục tiêu: tìm tất cả số d chữ số có tổng chữ số bằng tổng đầu vào. Các số có 0 dẫn đầu không được coi là số d chữ số.
Phạm vi: chữ số 1-100, tổng 1-500.
Hiểu qua ví dụ
Đầu vào: digits = 3, digi_sum = 3
Đầu ra: Số lượng số 3 chữ số tổng chữ số = 3: 6
Giải thích: Các số: 102, 111, 120, 201, 210, 300.
Đầu vào: digits = 4, digi_sum = 2
Đầu ra: Số lượng số 4 chữ số tổng chữ số = 2: 4
Giải thích: Các số: 1001, 1010, 1100, 2000.
Phương pháp sử dụng
Duyệt từ số d chữ số đầu tiên, tìm số đầu tiên có tổng chữ số = tổng cho trước. Tăng số lên 9 cho đến khi tổng chữ số > tổng cho trước. Khi tìm thấy số tổng chữ số lớn hơn, tăng 1 và tìm số tiếp theo có tổng = tổng cho trước. Lặp lại đến số d chữ số cuối cùng.
- Nhập số chữ số và tổng chữ số.
- Hàm
digits_sum(int digits, int digi_sum)trả về đếm. - Khởi tạo
count = 0. - Số đầu tiên:
Left = pow(10, digits - 1). Số cuối:right = pow(10, digits) - 1. - Vòng lặp
whiletừLeftđếnright. - Tính tổng chữ số của
i(biếnlast). - Nếu tổng =
digi_sumtăngcount,i += 9. - Ngược lại
i++. - Trả về
count.
Ví dụ mã nguồn
#include <bits/stdc++.h>
using namespace std;
int digits_sum(int digits, int digi_sum) {
int count = 0;
int Left = pow(10, digits - 1);
int right = pow(10, digits) - 1;
int i = Left;
while (i <= right) {
int first = 0;
int last = i;
while (last != 0) {
first = first + last % 10;
last = last / 10;
}
if (first == digi_sum) {
count++;
i = i + 9;
} else {
i++;
}
}
return count;
}
int main() {
int digits = 5;
int digi_sum = 7;
cout << "Count of n digit numbers whose sum of digits equals to given sum are: " << digits_sum(digits, digi_sum);
return 0;
}
Chạy mã trên cho kết quả:
Kết quả
Count of n digit numbers whose sum of digits equals to given sum are: 5