Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Đếm số Unary trong một khoảng trong C++


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, end là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 đến end. Nếu check_unary(i) trả về true, thì tăng biến đếm.
  • Bên trong check_unary(int number), lấy biến tạm count.
  • Nếu số N là 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