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