使用 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 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.