Đưa ra N , A và B . Tìm số lớn hơn N có cùng số A và B các chữ số. Hãy xem một ví dụ.
N = 1234 A = 2 B = 3
Chúng ta cần kiểm tra mọi khả năng của số chữ số đã cho. Có hai chữ số để tạo thành số. Và mỗi số đếm trong số phải giống nhau.
Thuật toán
-
Khởi tạo A, B và N.
-
Viết một hàm đệ quy.
-
Kiểm tra xem số hiện tại có lớn hơn N không và có số A bằng nhau và B chữ số.
-
Trả lại số nếu điều kiện trên thỏa mãn.
- Thêm chữ số A vào kết quả.
- Thêm chữ số B vào kết quả.
- Gọi một cách đệ quy hàm với số nhỏ nhất từ hai hàm trên.
-
Thực hiện
Sau đây là cách thực hiện thuật toán trên trong 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; }
Đầu ra
Nếu bạn chạy đoạn mã trên, thì bạn sẽ nhận được kết quả sau.
2233