กำหนดตัวแปร long ที่มีจำนวนบวกเป็นอินพุต เป้าหมายคือหาจำนวนตัวอักษรที่ค่า ASCII ของตัวเลขสามารถสร้างจากหลักของตัวเลขได้
เลือกสองหลักจากตัวเลขและจัดเรียงให้พวกเขาสร้างค่า ASCII ของตัวอักษรภาษาอังกฤษ ค่า ASCII ของ A-Z เริ่มจาก 65 ถึง 90 และค่า ASCII ของ a-z เริ่มจาก 97 ถึง 122
ตัวเลขทั้งหมดที่ต้องเลือกจะเป็น 26+26 = 52
ทำความเข้าใจด้วยตัวอย่าง
ตัวอย่าง
Input - N_digits = 163465
Output - จำนวนตัวอักษรที่ค่า ASCII สามารถสร้างจากหลักของ N คือ: 2
คำอธิบาย - ค่า ASCII ที่อยู่ใน 163465 คือ 65 และ 66 เท่านั้น ดังนั้นมีเพียงสองตัวอักษรที่เป็นไปได้
Input - N_digits = 902349
Output - จำนวนตัวอักษรที่ค่า ASCII สามารถสร้างจากหลักของ N คือ: 2
คำอธิบาย - ค่า ASCII ที่อยู่ใน 902349 คือ 90 และ 99 เท่านั้น ดังนั้นมีเพียงสองตัวอักษรที่เป็นไปได้
แนวทางที่ใช้ในโปรแกรมด้านล่าง
ในแนวทางนี้ เราจะสร้างอาร์เรย์ความถี่ total[10] ก่อนสำหรับเก็บความถี่ของหลักในตัวเลขอินพุต ตอนนี้รับแต่ละตัวเลข i ในช่วง 65 ถึง 90 และ 97 ถึง 122 แยกหลักของ i และค้นหาในอาร์เรย์ความถี่ ถ้าหลักทั้งหมดของ i อยู่ในอาร์เรย์ความถี่ (total[current digit] จะไม่เป็นศูนย์สำหรับทุกระดับ) ให้เพิ่ม count
- รับ long int N_digits เป็นอินพุต
- ฟังก์ชัน check(int arr[], int val) รับอาร์เรย์ความถี่ arr[] และตัวเลข ASCII val เป็นอินพุตและคืนค่า true ถ้า val สามารถสร้างจากหลักใน arr[] ได้
- ใช้ for loop สร้างสำเนาของอาร์เรย์ความถี่เป็น total[10]
- ตอนนี้ใช้ while loop แยกแต่ละหลักของ val และค้นหาใน total[]
- ถ้า total[digit] เป็น 0 คืนค่า false มิฉะนั้นใช้มันและลดจำนวนลง 1
- ลด val สำหรับ LSB ถัดไป
- ถ้า while ทำงานจนจบ val สามารถสร้างจากหลักใน total[] ได้ คืนค่า true
- ฟังก์ชัน ASCII_N(long long int N_digits) รับตัวเลขอินพุตและคืนค่าจำนวนตัวอักษรที่ค่า ASCII สามารถสร้างจากหลักของ N
- ตั้งค่า count เริ่มต้นเป็น 0 และเริ่มต้นอาร์เรย์ความถี่ total[10] ด้วย 0
- เติมอาร์เรย์ความถี่สำหรับหลักใน N_digits ด้วย while loop แยก LSB เป็น values = N_digits % 10 และเพิ่ม total[values] ขึ้น 1
- ลด N_digits ลง 10
- ตอนนี้วนลูปตัวเลข ASCII ของตัวอักษรจาก 97 ถึง 122 และ 65 ถึง 90 ด้วย for loop
- ถ้า check(total, i) คืนค่า true เพิ่ม count
- ในท้ายที่สุดของ for loops ทั้งสอง คืนค่า count เป็นผลลัพธ์
ตัวอย่าง
#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);
}
หากเรารันโค้ดข้างต้น จะได้ผลลัพธ์ดังนี้
ผลลัพธ์
Count of alphabets whose ASCII values can be formed with the digits of N are: 2