Cho một khoảng số giữa start và end. Mục tiêu: đếm số lượng số có chữ số đầu tiên bằng chữ số cuối cùng và nằm trong khoảng [first, last].
Tất cả số 1 chữ số sẽ được đếm nếu nằm trong khoảng.
Hiểu qua ví dụ
Đầu vào: start = 100, end = 200
Đầu ra: Số lượng số thỏa mãn: 10
Giải thích: Các số: 101, 111, 121, 131, 141, 151, 161, 171, 181, 191.
Đầu vào: start = 1, end = 10
Đầu ra: Số lượng số thỏa mãn: 9
Giải thích: Tất cả số 1 chữ số: 1, 2, 3, 4, 5, 6, 7, 8, 9.
Phương pháp sử dụng
Tất cả số 1 chữ số trong khoảng [start, end] được đếm. Với mỗi số kiểm tra chữ số đầu và cuối. Nếu chữ số đầu <= cuối thì cộng 8 + val/10, nếu lớn hơn cộng 9 + val/10. val là số hiện tại trong gọi đệ quy range(int val).
- Nhập
start,end. count = range(end) - range(start).- Hàm
range(int val)trả về đếm số thỏa mãn. - Khởi tạo
count = 0,end = val % 10(chữ số cuối). - Trả về
valnếuval < 10(1 chữ số). - Vòng lặp
whiletínhstart = val % 10,val = val / 10để lấy chữ số đầu. - Nếu
start <= endcộng9 + set_val / 10. - Nếu
endcộng8 + set_val / 10. - Trả về
count.
Ví dụ mã nguồn
#include <iostream>
using namespace std;
int range(int val) {
int count = 0;
int start;
int end = val % 10;
int set_val = val;
if (val < 10) return val;
end = val % 10;
while (val) {
start = val % 10;
val = val / 10;
}
if (start <= end) {
count = 9 + set_val / 10;
} else {
count = 8 + set_val / 10;
}
return count;
}
int main() {
int start = 10, end = 50;
int count = range(end) - range(start);
cout << "Count of Numbers in Range where first digit is equal to last digit of the number are: " << count;
return 0;
}
Chạy mã trên cho kết quả:
Kết quả
Count of Numbers in Range where first digit is equal to last digit of the number are: 4