주어진 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