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

C++에서 최대 2개의 고유 숫자로 N보다 작은 모든 숫자 인쇄


이 문제에서 정수 N이 주어지고 N보다 작은 모든 숫자를 최대 2개의 고유 숫자로 인쇄했습니다. 즉, 최대 2개의 다른 숫자를 사용하여 숫자를 생성할 수 있습니다. .

문제를 이해하기 위해 예를 들어 보겠습니다 -

Input: N = 17
Output: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

이 문제를 해결하기 위해 고유한 두 자리 숫자만 있는 모든 숫자를 생성합니다. 숫자 생성 프로세스는 0에서 시작하여 숫자가 N보다 크거나 같을 때 끝납니다. 두 개의 고유한 선택에 대해 num*10+i 및 num*10+j를 사용하여 숫자를 재귀적으로 생성합니다. . 이 과정에서 일부 중복 번호가 발생할 수 있습니다. 따라서 set을 사용할 수 있습니다. 그것을 피하기 위해 숫자를 저장합니다.

예시

이 프로그램은 문제를 해결하기 위한 접근 방식의 구현을 보여줍니다.

#include <bits/stdc++.h>
using namespace std;
set<int> numbers;
void generateNumbers(int n, int num, int i, int j){
   if (num > 0 && num < n)
      numbers.insert(num);
   if (num >= n)
      return;
   if (num*10+i > num)
      generateNumbers(n, num*10+i, i, j);
   generateNumbers(n, num*10+j, i, j);
}
void printUniqueBitNumber(int n){
   for (int i = 0; i <= 9; i++)
      for (int j = i + 1; j <= 9; j++)
         generateNumbers(n, 0, i, j);
   cout<<"The numbers are generated are : ";
   while (!numbers.empty()) {
      cout<<*numbers.begin()<<" ";
      numbers.erase(numbers.begin());
   }
}
int main(){
   int n = 17;
   printUniqueBitNumber(n);
   return 0;
}

출력

The numbers are generated are : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16