在C ++中其ASCII值可以由N的数字组成的字母计数
给定一个包含正数作为输入的长变量。目的是找到字母的计数,这些字母的ASCII值数字出现在数字的数字中。
从数字中选择任意两个数字,并以使其形成英语字母的ASCII值的方式进行排列。AZ的ASCII值从65到90开始,az的ASCII值从97到122开始。
将被挑选的总数将是26 + 26 = 52。
让我们通过示例来理解。
例如
输入 -N_digits = 163465
输出 -ASCII值可以用N的数字形成的字母计数为:2
说明-163465中显示的ASCII值仅为65和66。因此,只有两个字母是可能的。
输入-N_digits = 902349
输出 -ASCII值可以用N的数字形成的字母计数为:2
说明-902349中存在的ASCII值仅为90和99。因此,只有两个字母是可能的。
以下程序中使用的方法如下
在这种方法中,我们将首先创建一个频率数组total [10],用于存储输入数字中的数字频率。现在,将i取在65到90以及97到122的范围内。提取i的数字并在频率数组中搜索。如果频率数组中存在i的所有数字(所有数字的total [当前数字]都不为零),则递增计数。
以long int N_digits作为输入。
函数check(int arr [],int val)将频率数组arr []和ASCII数字val作为输入,如果val可以由arr []中的数字组成,则返回true。
使用for循环将频率数组的副本复制为total [10]。
现在使用while循环,提取val的每个数字并搜索total []。
如果total [digit]为0,则返回false,否则使用false并将其计数减1。
降低下一个LSB的val。
如果while完全执行,则val可以由total []中的数字组成,因此返回true。
函数ASCII_N(long long int N_digits)接受输入的数字并返回字母的计数,其ASCII值可以用N的数字形成。
将初始计数设为0,然后将频率数组total [10]初始化为0。
使用while循环为N_digits中的数字填充频率数组。将LSB提取为值= N个数字%10,并将total [values]递增1。
将N_digits减少10。
现在,使用for循环遍历从97到122和65到90的ASCII字母数字。
如果check(total, i)返回真,则增加计数。
在两个for循环的末尾,返回计数作为结果。
示例
#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 << "ASCII值可以由N的数字组成的字母计数为: " << ASCII_N(N_digits);
}
如果我们运行上面的代码,它将生成以下输出-
输出结果
ASCII值可以由N的数字组成的字母计数为: 2
以上是 在C ++中其ASCII值可以由N的数字组成的字母计数 的全部内容, 来源链接: utcz.com/z/320059.html