C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

ASCII値がC++のNの数字で形成できるアルファベットの数


入力として正の数を含む長い変数が与えられます。目標は、ASCII値の数字が数字の数字に含まれているアルファベットの数を見つけることです。

数字から任意の2桁を選び、英語のアルファベットのASCII値を形成するように配置します。 A-ZのASCII値は65から90で始まり、a-zのASCII値は97から122で始まります。

選ばれる総数は26+26=52になります。

例を挙げて理解しましょう。

入力- N_digits =163465

出力- Nの数字でASCII値を形成できるアルファベットの数は次のとおりです。2

説明- 163465に存在するASCII値は65と66のみです。したがって、2つのアルファベットのみが可能です。

入力- N_digits =902349

出力- Nの数字でASCII値を形成できるアルファベットの数は次のとおりです。2

説明- 902349に存在するASCII値は90と99のみです。したがって、2つのアルファベットのみが可能です。

以下のプログラムで使用されているアプローチは次のとおりです

このアプローチでは、最初に、入力番号の桁の頻度を格納するための頻度配列total[10]を作成します。次に、65〜90および97〜122の範囲の各数値iを取得します。iの数字を抽出し、頻度配列で検索します。 iのすべての桁が周波数配列に存在する場合(total [現在の桁]はすべての桁でゼロ以外になります)、カウントをインクリメントします。

  • 入力としてlongintN_digitsを使用します。
  • 関数check(int arr []、int val)は、周波数配列arr []とASCII数値valを入力として受け取り、varがarr[]の数字から作成できる場合はtrueを返します。
  • forループを使用して、周波数配列のコピーをtotal[10]として作成します。
  • ここで、whileループを使用して、valの各桁を抽出し、合計で検索します[]。
  • total [digit]が0の場合はfalseを返し、そうでない場合はそれを使用してカウントを1デクリメントします。
  • 次のLSBの値を減らします。
  • whileが完全に実行される場合、valは合計[]の数字から作成できるため、trueを返します。
  • 関数ASCII_N(long long int N_digits)は入力された数値を受け取り、ASCII値がNの数字で形成できるアルファベットの数を返します。
  • 初期カウントを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ループの最後に、結果としてカウントが返されます。

#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

  1. C++で数字との合計がNに等しい数Xを見つけます

    このチュートリアルでは、数字を含むいくつかが指定された数Nに等しい数を見つけます。 考え方は簡単です。与えられた数の左右100個の数をチェックします。 N≤1000000000であり、合計が100を超えることはありません。 問題を解決するための手順を見てみましょう。 番号を初期化します。 100回繰り返すループを作成します。 n--iおよびn+iの値を取得します。 数字の合計を見つけて追加します。 それらのいずれかがNに等しい場合は、それらを印刷します。 例 コードを見てみましょう。 #include <bits/stdc++.h> us

  2. Xとの合計がC++のフィボナッチ数であるノードをカウントします

    ノードの重みを数値として持つ二分木を指定します。目標は、その数がフィボナッチ数であるような重みを持つノードの数を見つけることです。フィボナッチ数列の数は次のとおりです。0、1、1、2、3、5、8、13…。n番目の数はの合計です。 (n-1)番目と(n-2)番目。重みが13の場合、それはフィボナッチ数であるため、ノードがカウントされます。 例 入力 temp=1。値を入力した後に作成されるツリーを以下に示します- 出力 Count the nodes whose sum with X is a Fibonacci number are: 3 説明 we are given with