Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

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[ 현재 숫자]는 모든 숫자에 대해 0이 아님) 카운트를 증가시킵니다.

  • long int N_digits를 입력으로 사용합니다.
  • 함수 검사(int arr[], int val)는 주파수 배열 arr[] 및 ASCII 숫자 val을 입력으로 사용하고 val이 arr[]의 숫자로 만들어질 수 있는 경우 true를 반환합니다.
  • for 루프를 사용하여 주파수 배열의 복사본을 전체로 만듭니다[10].
  • 이제 while 루프를 사용하여 val의 각 자릿수를 추출하고 총계[]를 검색합니다.
  • total[digit]이 0이면 false를 반환하고, 그렇지 않으면 이를 사용하고 카운트를 1만큼 감소시킵니다.
  • 다음 LSB의 값을 줄입니다.
  • 만약 while이 완전히 실행되면 total[]의 숫자로 val을 만들 수 있으므로 true를 반환합니다.
  • ASCII_N(long long int N_digits) 함수는 입력된 숫자를 받아 N의 숫자로 ASCII 값을 구성할 수 있는 알파벳의 개수를 반환합니다.
  • 초기 카운트를 0으로 취하고 주파수 배열 total[10]을 0으로 초기화합니다.
  • while 루프를 사용하여 N_digits의 숫자에 대한 주파수 배열을 채웁니다. LSB를 값 =N_digits % 10으로 추출하고 total[값]을 1씩 증가시킵니다.
  • N_digits를 10으로 줄입니다.
  • 이제 for 루프를 사용하여 97에서 122 및 65에서 90까지의 ASCII 알파벳을 탐색합니다.
  • 체크(total, i)가 true를 반환하면 카운트를 증가시킵니다.
  • 두 for 루프의 끝에서 결과로 count를 반환합니다.

#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