একটি লং ভেরিয়েবলে পজিটিভ নম্বর ইনপুট হিসেবে দেওয়া আছে। লক্ষ্য হল সেই নম্বরের ডিজিটগুলো দিয়ে যেসব অক্ষরের ASCII মান বানানো যায়, তাদের সংখ্যা বের করা।
নম্বর থেকে যেকোনো দুটি ডিজিট বাছাই করে সাজিয়ে ASCII মান বানাতে হবে। ইংরেজি বড় হাতের অক্ষর (A-Z) এর ASCII ৬৫ থেকে ৯০ এবং ছোট হাতের (a-z) এর ASCII ৯৭ থেকে ১২২। মোট ২৬+২৬=৫২ টি অক্ষর চেক করা হবে।
উদাহরণ দিয়ে বোঝা যাক
ইনপুট - N_digits = 163465
আউটপুট - ASCII মান বানানো যাবে এমন অক্ষরের সংখ্যা: ২
ব্যাখ্যা - 163465-এ ASCII ৬৫ এবং ৬৬ বানানো যায়। তাই ২টি অক্ষর সম্ভব।
ইনপুট - N_digits = 902349
আউটপুট - ASCII মান বানানো যাবে এমন অক্ষরের সংখ্যা: ২
ব্যাখ্যা - 902349-এ ASCII ৯০ এবং ৯৯ বানানো যায়। তাই ২টি অক্ষর সম্ভব।
প্রোগ্রামে ব্যবহৃত পদ্ধতি
প্রথমে ইনপুট নম্বরের ডিজিট ফ্রিকোয়েন্সি অ্যারে total[10] বানানো হয়। তারপর ৬৫ থেকে ৯০ এবং ৯৭ থেকে ১২২ পর্যন্ত প্রতিটি ASCII নম্বরের জন্য তার ডিজিটগুলো ফ্রিকোয়েন্সি অ্যারেতে খুঁজা হয়। যদি সব ডিজিট পাওয়া যায় (ফ্রিকোয়েন্সি নন-জিরো) তবে কাউন্ট বাড়ানো হয়।
- লং ইন্ট
N_digitsইনপুট নিন। - ফাংশন
check(int arr[], int val)ফ্রিকোয়েন্সি অ্যারে এবং ASCII নম্বর নিয়ে true রিটার্ন করে যদি val বানানো সম্ভব হয়। - ফর লুপে ফ্রিকোয়েন্সি অ্যারে কপি করুন
total[10]-এ। - হোয়াইল লুপে
val-এর প্রতিটি ডিজিট বের করুন (val%10) এবংtotal[]-এ খুঁজুন। - যদি
total[digit]==0হয় তবে false রিটার্ন করুন, অন্যথায় কাউন্ট কমিয়েval/=10। - হোয়াইল লুপ পুরো হলে true রিটার্ন করুন।
- ফাংশন
ASCII_N(long long int N_digits)ইনপুট নম্বর নিয়ে অক্ষর সংখ্যা রিটার্ন করে। - প্রাথমিক কাউন্ট ০, ফ্রিকোয়েন্সি অ্যারে
total[10]={0}। - হোয়াইল লুপে
N_digits-এর ডিজিট ফ্রিকোয়েন্সি পূরণ করুন। - ৯৭ থেকে ১২২ এবং ৬৫ থেকে ৯০ পর্যন্ত FOR লুপ: যদি
check(total, i)true হয় তবে কাউন্ট বাড়ান। - দুই লুপ শেষে কাউন্ট রিটার্ন করুন।
উদাহরণ কোড
#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);
return 0;
}
উপরের কোড রান করলে নিচের আউটপুটটি পাওয়া যাবে:
আউটপুট
Count of alphabets whose ASCII values can be formed with the digits of N are: 2