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

주어진 기반의 C++ 범디지털 숫자

<시간/>

0에서 밑수 B까지의 모든 숫자를 포함하는 숫자를 해당 밑수에서 Pandigital 숫자라고 합니다. 그러나 일부 숫자는 1에서 9까지의 숫자를 가지며 0이 없는 범디지털 숫자라고 합니다. 범디지털 숫자의 몇 가지 예는 0123456789, 0789564312 등입니다.

이 튜토리얼에서 우리는 숫자와 밑수가 주어지는 문제에 대해 논의할 것이고, 그 숫자가 주어진 밑수에서 범디지털인지 여부를 확인해야 합니다. 예를 들면 -

Input: num = “9651723467380AZ”, base = 10
Output: YES
Explanation: num contains all the digits in the base 10 i.e from 0 to 9, so it is a pandigital number.

Input: num = “130264ABCDE745789”, base = 16
Output: NO
Explanation: num does not contain F(15) which is in the base 16 i.e from 0 to 15, so it is not a pandigital number.

해결책을 찾기 위한 접근 방식

이 문제를 해결하기 위해 Set을 사용하고 고유한 값을 저장해야 하기 때문에 집합에 각 숫자를 삽입합니다.

  • 한 번에 각 문자를 사용하여 문자열을 탐색합니다.

  • 그런 다음 요소가 정수인지 알파벳인지 확인합니다.

  • 알파벳인 경우 알파벳의 해당 위치에 10을 더하여 2자리 숫자를 나타냅니다.

  • 값을 집합에 저장합니다.

  • 순회 후, 세트의 크기가 밑변과 같은지 확인하십시오.

예시

위 접근 방식에 대한 C++ 코드

 
#include<bits/stdc++.h>
using namespace std;
int main(){
    int base = 10;
    char n[] = "9651723467380AZ";
    // Declaring set to store unique values.
    set<int, greater<int> > s;
    // Traversing through the string.
    for (int i = 0; i < strlen(n); i++){
        // Checking if element is Integer.
        if (n[i] >= '0' && n[i] <= '9')
           s.insert(n[i]- '0');
        // Checking if element is alphabet.
        else if (n[i] - 'A' <= base - 11)
           s.insert(n[i] - 'A' + 10) ;
    }
    // Checking if all the digits are present.
    if(s.size()==base)
       cout<< "YES";
    else
        cout<< "NO";
    return 0;
}

출력

YES

결론

이 튜토리얼에서는 숫자와 밑수가 주어지는 문제에 대해 논의했습니다. 숫자가 범디지털인지 여부를 찾아야 합니다. 세트에 값을 삽입하고 밑으로 크기를 확인하여 이 문제를 해결하는 간단한 접근 방식에 대해 논의했습니다. 우리는 또한 C, Java, Python 등과 같은 프로그래밍 언어로 할 수 있는 이 문제에 대한 C++ 프로그램에 대해 논의했습니다. 이 튜토리얼이 도움이 되기를 바랍니다.