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

C++에서 동일한 양의 자릿수 A와 B를 사용하여 N보다 다음으로 큰 수

<시간/>

주어진 N , A , 및 B . 동일한 수의 A 로 N보다 큰 수를 찾으십시오. 및 B 숫자. 예를 들어 보겠습니다.

N = 1234
A = 2
B = 3

주어진 자릿수의 모든 가능성을 확인해야 합니다. 숫자를 구성하는 두 자리 숫자가 있습니다. 그리고 숫자의 각 자릿수는 동일해야 합니다.

알고리즘

  • A, B, N을 초기화합니다.

  • 재귀 함수를 작성하십시오.

    • 현재 숫자가 N 보다 큰지 확인 동일한 수의 A B 숫자.

    • 위의 조건을 만족하면 숫자를 반환합니다.

    • 결과에 숫자 A를 더하세요.
    • 결과에 숫자 B를 더하세요.
    • 위의 두 개 중 최소 개수로 함수를 재귀적으로 호출합니다.

구현

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

#include <bits/stdc++.h>
using namespace std;
long getNextGreaterElement(long result, int A, int A_Count, int B, int B_Count, int N) {
   if (result > 1e11) {
      return 1e11;
   }
   if (A_Count == B_Count && result >= N) {
      return result;
   }
   return min(getNextGreaterElement(result * 10 + A, A, A_Count + 1, B, B_Count, N),       getNextGreaterElement(result * 10 + B, A, A_Count, B, B_Count + 1, N));
}
int main() {
   int N = 1234;
   int A = 2;
   int B = 3;
   cout << getNextGreaterElement(0, A, 0, B, 0, N) << endl;
   return 0;
}

출력

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

2233