使用 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

更新于: 2021年1月29日

192 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告