Cho hai số start và end đại diện cho một khoảng. Mục tiêu là tìm số lượng số Unary tồn tại trong khoảng [start, end].
Chúng ta có thể kiểm tra xem số có phải Unary bằng các bước sau: Nếu lấy số 13 thì 1^2 + 3^2 = 10, rồi 1^2 + 0^2 = 1. Vì vậy tổng cuối cùng theo cách này là 1 nên 13 là số Unary.
Ví dụ
Đầu vào
start=1 end=20
Đầu ra
Số Unary trong khoảng là: 5
Giải thích
Các số là: 1, 7, 10, 12, và 13
Đầu vào
start=50 end=100
Đầu ra
Số Unary trong khoảng là: 7
Giải thích
Các số là: 59, 63, 67, 74, 75, 78, và 89
Phương pháp sử dụng
Giữa 1 và 9, các số 1 và 7 là Unary. Đối với các số khác, chúng ta sẽ dùng tổng bình phương các chữ số cho đến khi nó cho 1. Tiếp tục quá trình này cho tất cả các số trong khoảng. Tăng biến đếm cho tất cả các số Unary tìm được theo cách này.
- Nhận hai số nguyên
start,endlàm đầu vào. - Hàm
check_unary(int number)trả về true nếu giá trị truyền vào là Unary ngược lại trả về false. - Hàm
Unary_range(int start, int end)nhận biến khoảng và trả về số lượng số Unary nằm trong khoảng. - Khởi tạo biến đếm ban đầu là 0. Sử dụng vòng lặp for, duyệt từ
i=startđếnend. Nếucheck_unary(i)trả về true, thì tăng biến đếm. - Bên trong
check_unary(int number), lấy biến tạmcount. - Nếu số
Nlà 1, 7, trả về true. Trả về false cho tất cả các số khác nhỏ hơn 10 (number/10 == 0). - Sau đó trong vòng lặp while tính tổng bình phương các chữ số.
- Gọi lại
check_unary(int number)cho các tổng liên tục đó cho đến khi tổng trở thành 1. - Trả về biến đếm làm kết quả.
Ví dụ mã
#include <iostream>
using namespace std;
bool check_unary(int number) {
int total = 0;
if (number == 1) {
return true;
} else if (number == 7) {
return true;
} else if (number / 10 == 0) {
return false;
}
while (number != 0) {
int temp = number % 10;
total = total + temp * temp;
number = number / 10;
}
return check_unary(total);
}
int Unary_range(int start, int end) {
int count = 0;
for (int i = start; i <= end; i++) {
if (check_unary(i) == 1) {
count++;
}
}
return count;
}
int main() {
int start = 200, end = 400;
cout << "Số Unary trong khoảng là: " << Unary_range(start, end);
return 0;
}
Đầu ra
Nếu chạy mã trên, sẽ tạo ra đầu ra sau:
Số Unary trong khoảng là: 31