Yêu cầu: Mr Bin là một cậu bé đang học mẫu giáo, cậu thích tìm hiểu về số học. Cậu đang nghiên cứu một loại số mà cậu tạm gọi là số vui vẻ. Cậu định nghĩa rằng: một số nguyên dương n được gọi là số vui vẻ nếu tổng bình phương các chữ số của n là một số chẵn. Cậu băn khoăn tự hỏi liệu có bao nhiêu số vui vẻ trong đoạn [a, b] nhỉ? Nhờ bạn hãy giúp Mr Bin nhé! Dữ liệu: - Một dòng ghi hai số nguyên dương a, b (0<a,b<=106) Kết quả: in ra số lượng số vui vẻ lớn hơn hoặc bằng a và nhỏ hơn hoặc bằng b Ví dụ input 1 5 output 2
2 câu trả lời
- sum[i] = <tổng bình phương chữ số của i>
- Công thức truy hồi: sum[i] = sum[i / 10] + (i % 10) * (i % 10)
- Code:
#include <iostream>
using namespace std;
const int N = 1e6;
int sum[N + 1];
int a, b, res;
int main() {
cin >> a >> b;
for (int i = 1; i <= b; ++i) {
sum[i] = sum[i / 10] + (i % 10) * (i % 10);
}
for (int i = a; i <= b; ++i) {
if (sum[i] % 2 == 0) res++;
}
cout << res;
}
Để giúp Mr. Bin đếm số lượng số vui vẻ trong đoạn [a, b], chúng ta có thể sử dụng một vòng lặp để kiểm tra từng số trong đoạn [a, b] theo định nghĩa của số vui vẻ.
*Chương trình:
def is_happy_number(n):
sum_of_squares = 0
while n > 0:
digit = n % 10
sum_of_squares += digit ** 2
n //= 10
return sum_of_squares % 2 == 0
def count_happy_numbers(a, b):
count = 0
for num in range(a, b + 1):
if is_happy_number(num):
count += 1
return count
# Nhập đầu vào
a, b = map(int, input().split())
# Đếm số lượng số vui vẻ trong đoạn [a, b]
result = count_happy_numbers(a, b)
# In kết quả
print(result)
Giải thích:
- Hàm is_happy_number(n) kiểm tra xem một số n có phải là số vui vẻ hay không. Hàm này tính tổng bình phương các chữ số của n và kiểm tra xem tổng đó có chia hết cho 2 hay không.
- Hàm count_happy_numbers(a, b) đếm số lượng số vui vẻ trong đoạn [a, b]. Hàm này sử dụng vòng lặp để kiểm tra từng số trong đoạn và tăng biến đếm (count) lên nếu số đó là số vui vẻ.
- Đầu vào được nhập từ người dùng và gán cho a và b.
- Kết quả được tính bằng cách gọi hàm count_happy_numbers(a, b).
- Kết quả cuối cùng được in ra màn hình.
Với đầu vào là 1 5, đoạn mã trên sẽ in ra 2, đại diện cho số lượng số vui vẻ trong đoạn từ 1 đến 5 là 2.