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

Đếm số trong khoảng có chữ số khác nhau với tích của nó và q trong C++

Cho hai số start, end làm biến khoảng và số nguyên q. Mục tiêu: tìm các số trong khoảng sao cho số đó và tích của nó với q không có chữ số chung.

Ví dụ: số 5, q = 3 → tích 15. Cả 5 và 15 có chữ số 5 chung.

Số 2, q = 5 → tích 10. 2 và 10 không có chữ số chung.

Hiểu qua ví dụ

Đầu vào: start = 5, end = 10, q = 2

Đầu ra: Số lượng số thỏa mãn: 5

Giải thích: Các số: 5(10), 6(12), 7(14), 8(16), 9(18).

Đầu vào: start = 20, end = 25, q = 5

Đầu ra: Số lượng số thỏa mãn: 2

Giải thích: 22(110), 23(115).

Phương pháp sử dụng

Duyệt từ start đến end, chuyển số và tích với q thành chuỗi. Tạo mảng arr[26] lưu tần suất ký tự số hiện tại. Duyệt chuỗi tích, nếu ký tự nào có tần suất > 0 trong arr[] thì chung → trả về 0. Ngược lại trả về 1.

  • Nhập biến khoảng và q.
  • Hàm check(int i, int q) trả về 1 nếu chữ số không chung.
  • Chuyển i thành chuỗi str, tích i*q thành str_2.
  • Mảng arr[26] = {0} đếm tần suất str.
  • Duyệt str_2, nếu arr[str_2[j]-'0'] > 0 trả về 0.
  • Trả về 1.
  • Hàm unequal(int start, int end, int q) trả về đếm.
  • Khởi tạo count = 0, duyệt i = start..end, nếu check(i, q) tăng count.
  • Trả về count.

Ví dụ mã nguồn

#include <bits/stdc++.h> 
using namespace std; 

int check(int i, int q) { 
    string str = to_string(i); 
    int length = str.size(); 
    int arr[26] = {0}; 
    int temp = i * q; 
    string str_2 = to_string(temp); 
    int length_2 = str_2.size(); 
    for (int j = 0; j < length; j++) { 
        arr[str[j] - '0']++; 
    } 
    for (int j = 0; j < length_2; j++) { 
        if (arr[str_2[j] - '0']) return 0; 
    } 
    return 1; 
} 

int unequal(int start, int end, int q) { 
    int count = 0; 
    for (int i = start; i <= end; i++) { 
        if (check(i, q)) count++; 
    } 
    return count; 
} 

int main() { 
    int start = 20, end = 40, q = 4; 
    cout << "Count of numbers in range such that digits in it and it's product with q are unequal are: " << unequal(start, end, q); 
    return 0; 
}

Chạy mã trên cho kết quả:

Kết quả

Count of numbers in range such that digits in it and it's product with q are unequal are: 1