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

Đếm chữ cái có mã ASCII tạo được từ chữ số của N trong C++

Cho một biến long chứa số dương. Mục tiêu: đếm số chữ cái mà các chữ số của mã ASCII của chúng có mặt trong các chữ số của số đã cho.

Chọn bất kỳ 2 chữ số từ số và sắp xếp sao cho tạo thành mã ASCII của chữ cái tiếng Anh. Mã ASCII A-Z: 65-90, a-z: 97-122. Tổng cộng 52 mã cần kiểm tra.

Hiểu qua ví dụ

Đầu vào: N_digits = 163465

Đầu ra: Số chữ cái thỏa mãn: 2

Giải thích: Các mã ASCII trong 163465 là 65 và 66 → 2 chữ cái.

Đầu vào: N_digits = 902349

Đầu ra: Số chữ cái thỏa mãn: 2

Giải thích: Các mã ASCII trong 902349 là 90 và 99 → 2 chữ cái.

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

Tạo mảng tần suất total[10] cho các chữ số trong số đầu vào. Duyệt từng số i trong khoảng 65-90 và 97-122. Tách chữ số của i tìm trong mảng tần suất. Nếu tất cả chữ số của i có mặt (total[chữ số] > 0) thì tăng đếm.

  • Nhập long long int N_digits.
  • Hàm check(int arr[], int val) trả về true nếu val tạo được từ chữ số trong arr[].
  • Sao chép mảng tần suất, tách chữ số của val bằng val % 10, kiểm tra trong total[].
  • Nếu total[chữ số] == 0 trả về false, ngược lại giảm tần suất và tiếp tục.
  • Hàm ASCII_N(long long int N_digits) trả về đếm.
  • Khởi tạo count = 0, mảng total[10] = {0}.
  • Điền tần suất chữ số của N_digits.
  • Duyệt mã ASCII 97-122 và 65-90, nếu check(total, i) tăng count.
  • Trả về count.

Ví dụ mã nguồn

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

bool check(int arr[], int val) { 
    int total[10]; 
    for (int i = 0; i < 10; i++) total[i] = arr[i]; 
    while (val > 0) { 
        int values = val % 10; 
        if (total[values] == 0) return false; 
        else total[values]--; 
        val = floor(val / 10); 
    } 
    return true; 
} 

int ASCII_N(long long int N_digits) { 
    int count = 0; 
    int total[10] = {0}; 
    while (N_digits > 0) { 
        int values = N_digits % 10; 
        total[values]++; 
        N_digits = floor(N_digits / 10); 
    } 
    for (int i = 97; i <= 122; i++) { 
        if (check(total, i)) count++; 
    } 
    for (int i = 65; i < 91; i++) { 
        if (check(total, i)) count++; 
    } 
    return count; 
} 

int main() { 
    long long int N_digits = 251326; 
    cout << "Count of alphabets whose ASCII values can be formed with the digits of N are: " << ASCII_N(N_digits); 
}

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

Kết quả

Count of alphabets whose ASCII values can be formed with the digits of N are: 2