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

C++에서 {0, 1, 2, 3, 4, 5}의 숫자가 있는 n번째 숫자

<시간/>

숫자 {0, 1, 2, 3, 4, 5}로 구성된 숫자는

0, 1, 2, 3, 4, 5, 10, 11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 25 등,

처음 6자리를 사용하여 위의 수열을 구성할 수 있습니다. 숫자 형성의 예를 살펴보겠습니다.

1 * 10 + 0 = 10
1 * 10 + 1 = 11
1 * 10 + 2 = 12
1 * 10 + 3 = 13
1 * 10 + 4 = 14
1 * 10 + 5 = 15

마찬가지로 숫자 2, 3, 4, 5를 신청하십시오. 위의 패턴을 사용하여 2로 다음 6개의 숫자를 얻습니다. 4, 5 다음에 3.

알고리즘

  • 숫자 n을 초기화합니다.
  • 벡터를 초기화합니다.
  • 0에서 5까지 반복하는 루프를 작성합니다.
    • 모든 숫자를 벡터로 푸시합니다.
  • 시리즈의 처음 6개 번호가 있습니다.
  • 0에서 n/6까지 반복하는 루프를 작성합니다.
    • 0에서 5까지 반복하는 루프를 작성합니다.
      • 위에서 설명한 패턴으로 나머지 숫자를 생성합니다.
      • 벡터로 푸시합니다.
  • 시퀀스에서 n번째 숫자를 반환합니다.

구현

다음은 위의 알고리즘을 C++로 구현한 것입니다.

#include <bits/stdc++.h>

using namespace std;

int findNthNumber(int n) {
   vector<int> numbers;

   for (int i = 0; i < 6; i++) {
      numbers.push_back(i);
   }
   for (int i = 0; i <= n / 6; i++) {
      for (int j = 0; j < 6; j++) {
         if ((numbers[i] * 10) != 0) {
            numbers.push_back(numbers[i] * 10 + numbers[j]);
         }
      }
   }
   return numbers[n - 1];
}
int main() {
   int n = 7;
   cout << findNthNumber(n) << endl;
   return 0;
}

출력

위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

10