使用 C++ 统计 N 的数字可以组成的 ASCII 值的字母数量
给定一个长整型变量,其中包含一个正数作为输入。目标是找到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[当前数字] 将非零),则递增计数。
- 将长整型 N_digits 作为输入。
- 函数 check(int arr[], int val) 以频率数组 arr[] 和 ASCII 数字 val 作为输入,如果 val 可以由 arr[] 中的数字组成,则返回 true。
- 使用 for 循环将频率数组复制为 total[10]。
- 现在使用 while 循环,提取 val 的每个数字并在 total[] 中搜索。
- 如果 total[digit] 为 0,则返回 false,否则使用它并将计数递减 1。
- 减少 val 以获取下一个最低有效位。
- 如果 while 完全执行,则 val 可以由 total[] 中的数字组成,因此返回 true。
- 函数 ASCII_N(long long int N_digits) 获取输入数字并返回可以由 N 的数字组成的 ASCII 值的字母的数量。
- 将初始计数设为 0 并将频率数组 total[10] 初始化为 0。
- 使用 while 循环填充 N_digits 中数字的频率数组。提取最低有效位作为 values = N_digits % 10 并将 total[values] 递增 1。
- 将 N_digits 减少 10。
- 现在使用 for 循环遍历从 97 到 122 和 65 到 90 的字母的 ASCII 数字。
- 如果任何 check(total, i) 返回 true,则递增计数。
- 在两个 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 << "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
广告