Bài 2. SỐ MỘT SỐ – n1digit
Số một số là một số tự nhiên mà các chữ số của số đó giống nhau.
Ví dụ: 1, 8, 11, 555, 99999, …
Cho một số tự nhiên 𝑁. Hãy đếm số lượng số một số bé hơn hoặc bằng 𝑁.
Input: Dữ liệu nhập vào từ bàn phím gồm một số tự nhiên 𝑁 (𝑁 ≤ 109
).
Output: In ra màn hình một số duy nhất là số lượng số thỏa mãn đề bài.
Ví dụ:
Input Output Giải thích
15
10
Khi 𝑁 = 15 thì có 10 số là 1, 2, 3, 4, 5, 6, 7, 8, 9, 11.
111
19
Khi 𝑁 = 111 thì có 19 số là:
• Có 9 số từ 1 đến 9.
• Có 9 số 11, 22, 33, … , 99.
• Và có 1 số 111.
Quảng cáo
3 câu trả lời 464
Để giải bài toán đếm số lượng số một số (số tự nhiên mà tất cả các chữ số đều giống nhau) nhỏ hơn hoặc bằng một số tự nhiên N, ta sẽ thực hiện các bước sau:
### Bước 1: Xác định các số một số
Các số một số có thể được biểu diễn theo công thức:
- Các số có 1 chữ số: 1, 2, ..., 9.
- Các số có 2 chữ số: 11, 22, ..., 99.
- Các số có 3 chữ số: 111, 222, ..., 999.
- Các số có 4 chữ số: 1111, 2222, ..., 9999.
- ...
### Bước 2: Đếm số lượng
1. **Tính số một số cho từng bậc chữ số (1 chữ số, 2 chữ số, ...)**:
- Số lượng số một số cho mỗi bậc chữ số từ 1 đến k (trong đó k là số chữ số của N):
- Với 1 chữ số: có 9 số (từ 1 đến 9).
- Với 2 chữ số: có 9 số (11, 22, ..., 99).
- Với 3 chữ số: có 9 số (111, 222, ..., 999).
- Với d chữ số: có 9 số (111...1, 222...2, ..., 999...9).
2. **Tính số lượng số một số có d chữ số mà nhỏ hơn hoặc bằng N**:
- Nếu N có dạng a1a2a3...ak (trong đó a1 là chữ số đầu tiên, a2, ..., ak là các chữ số tiếp theo), ta chỉ cần xem xét các số có số chữ số nhỏ hơn k và số chữ số bằng k và nhỏ hơn hoặc bằng N.
### Bước 3: Viết mã
Dưới đây là một đoạn mã Python để thực hiện điều này:
`python
def count_one_digit_numbers(N):
count = 0
str_N = str(N)
len_N = len(str_N)
# Đếm số một số có số chữ số < len_N
count += 9 * (len_N - 1) # 9 số cho mỗi chữ số từ 1 đến 9
# Đếm số một số có số chữ số = len_N
# Số một số có d chữ số là d, d, ..., d (từ 1 đến 9)
# Ta chỉ cần xem d (từ 1 đến 9) nào mà <= N
for d in range(1, 10):
one_digit_number = int(str(d) * len_N) # tạo số một số
if one_digit_number <= N:
count += 1
return count
# Nhập vào số tự nhiên N
N = int(input("Nhập số tự nhiên N: "))
result = count_one_digit_numbers(N)
print(result)
`
### Giải thích mã:
1. **Đếm số một số cho từng bậc chữ số**:
- Đầu tiên, ta tính số một số có số chữ số nhỏ hơn số chữ số của N.
- Sau đó, ta tạo ra các số một số có cùng số chữ số với N và kiểm tra xem số đó có nhỏ hơn hoặc bằng N hay không.
2. **In ra kết quả**:
- Kết quả cuối cùng là số lượng số một số bé hơn hoặc bằng N.
### Ví dụ:
- Với N=15, chương trình sẽ trả về 10.
- Với N=111, chương trình sẽ trả về 19.
Bạn có thể chạy đoạn mã trên và thử nghiệm với các giá trị khác nhau của N để thấy kết quả.
Để giải bài toán này, ta cần đếm số lượng số một số (các số mà các chữ số giống nhau) bé hơn hoặc bằng một số tự nhiên N. Dưới đây là cách thực hiện:
### Bước 1: Xác định các số một số
Các số một số có thể được tạo ra từ các chữ số 1 đến 9. Với mỗi chữ số d, ta có thể tạo ra các số:
- 1 chữ số: d
- 2 chữ số: dd
- 3 chữ số: ddd
- ...
- k chữ số: ddd...d (k chữ số)
### Bước 2: Đếm số lượng
1. **Đếm các số một số với số chữ số ít hơn số chữ số của N**:
- Số một số có 1 chữ số: 9 (từ 1 đến 9)
- Số một số có 2 chữ số: 9 (11, 22, ..., 99)
- Số một số có 3 chữ số: 9 (111, 222, ..., 999)
- Số một số có 4 chữ số: 9 (1111, ..., 9999)
- Tiếp tục cho đến khi số chữ số lớn hơn số chữ số của N.
2. **Đếm các số một số có số chữ số bằng số chữ số của N**:
- Chỉ cần kiểm tra số một số nào có giá trị nhỏ hơn hoặc bằng N.
### Bước 3: Tính toán
Dưới đây là mã Python minh họa cho cách giải:
`python
def count_one_digit_numbers(N):
count = 0
str_n = str(N)
length_n = len(str_n)
# Đếm số một số có ít chữ số hơn
count += 9 * (length_n - 1) # 9 cho mỗi số chữ số từ 1 đến length_n-1
# Đếm số một số có cùng số chữ số với N
first_digit = int(str_n[0])
for d in range(1, first_digit + 1):
if d * int('1' * length_n) <= N:
count += 1
return count
# Nhập số N từ bàn phím
N = int(input())
result = count_one_digit_numbers(N)
print(result)
`
### Ví dụ
- Với N=15:
- Số một số là 1, 2, 3, 4, 5, 6, 7, 8, 9, 11 → **10 số**.
- Với N=111:
- Số một số là 1, 2, 3, ..., 9, 11, 22, ..., 99, 111 → **19 số**.
### Kết luận
Đoạn mã trên sẽ đếm số lượng số một số bé hơn hoặc bằng N và in ra kết quả.
def count_same_digit_numbers(N):
count = 0
# Đếm số hai chữ số
# Đếm số ba chữ số
# Đếm số bốn chữ số
# Đếm số năm chữ số
count += 9 # Có các số: 11111, 22222, ..., 99999
# Đếm số lượng số "một số" có độ dài chữ số bằng số chữ số của N
# Ví dụ: nếu N = 54321, ta kiểm tra 11111, 22222, ..., 99999
count += 1
return count
# Nhập dữ liệu
N = int(input("Nhập số tự nhiên N (N ≤ 10^9): "))
result = count_same_digit_numbers(N)
print(result)
Quảng cáo
Câu hỏi hot cùng chủ đề
-
29660