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ếuvaltạo được từ chữ số trongarr[]. - Sao chép mảng tần suất, tách chữ số của
valbằngval % 10, kiểm tra trongtotal[]. - Nếu
total[chữ số] == 0trả 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ảngtotal[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ăngcount. - 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