एक लॉन्ग वेरिएबल दिया गया है जिसमें इनपुट के रूप में एक धनात्मक संख्या है। लक्ष्य उन वर्णमाला की गिनती ढूंढना है जिनके ASCII मान के अंक संख्या के अंकों में मौजूद हैं।
संख्या से किन्हीं दो अंकों को चुनें और उन्हें इस तरह व्यवस्थित करें कि वे अंग्रेजी वर्णमाला का ASCII मान बनाएं। A-Z के ASCII मान 65 से 90 से शुरू होते हैं और a-z के ASCII मान 97 से 122 से शुरू होते हैं।
चुनी जाने वाली कुल संख्याएं 26+26=52 होंगी।
उदाहरणों से समझते हैं।
उदाहरण के लिए
इनपुट - N_digits = 163465
आउटपुट - N के अंकों से बनने वाले ASCII मान वाले वर्णमाला की संख्या: 2
व्याख्या - 163465 में मौजूद ASCII मान 65 और 66 हैं। तो केवल दो वर्णमाला संभव हैं।
इनपुट - N_digits = 902349
आउटपुट - N के अंकों से बनने वाले ASCII मान वाले वर्णमाला की संख्या: 2
व्याख्या - 902349 में मौजूद ASCII मान 90 और 99 हैं। तो केवल दो वर्णमाला संभव हैं।
नीचे दिए गए प्रोग्राम में उपयोग किया गया दृष्टिकोण
इस दृष्टिकोण में हम पहले इनपुट संख्या में अंकों की फ्रीक्वेंसी संग्रहीत करने के लिए एक फ्रीक्वेंसी सरणी total[10] बनाएंगे। अब रेंज 65 से 90 और 97 से 122 में प्रत्येक संख्या i लें। i के अंक निकालें और फ्रीक्वेंसी सरणी में खोजें। यदि i के सभी अंक फ्रीक्वेंसी सरणी में मौजूद हैं ( total[ वर्तमान अंक] सभी अंकों के लिए शून्येतर होगा ) तो काउंट बढ़ाएं।
- long int N_digits को इनपुट के रूप में लें।
- फ़ंक्शन check(int arr[], int val) फ्रीक्वेंसी सरणी arr[] और ASCII संख्या val को इनपुट के रूप में लेता है और true लौटाता है यदि val को arr[] में अंकों से बनाया जा सकता है।
- for लूप का उपयोग करके फ्रीक्वेंसी सरणी की एक प्रति total[10] के रूप में बनाएं।
- अब while लूप का उपयोग करके, val के प्रत्येक अंक को निकालें और total[] में खोजें।
- यदि total[digit] 0 है तो false लौटाएं, अन्यथा इसका उपयोग करें और इसकी गिनती 1 से घटाएं।
- अगले LSB के लिए val को घटाएं।
- यदि while पूरी तरह से 실행 होता है तो val को total[] में अंकों से बनाया जा सकता है तो true लौटाएं।
- फ़ंक्शन ASCII_N(long long int N_digits) इनपुट संख्या लेता है और N के अंकों से बनने वाले ASCII मान वाले वर्णमाला की गिनती लौटाता है।
- प्रारंभिक गिनती 0 लें और फ्रीक्वेंसी सरणी total[10] को 0 से इनिशियलाइज़ करें।
- while लूप का उपयोग करके N_digits में अंकों के लिए फ्रीक्वेंसी सरणी भरें। LSB को values = N_digits % 10 के रूप में निकालें और total[values] को 1 से बढ़ाएं।
- N_digits को 10 से घटाएं।
- अब for लूप का उपयोग करके वर्णमाला के ASCII नंबर 97 से 122 और 65 से 90 तक पार करें।
- यदि कोई check(total, i) true लौटाता है तो काउंट बढ़ाएं।
- दोनों for लूप के अंत में परिणाम के रूप में 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