Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Số lớn hơn N cùng số lượng chữ số A và B C++

Cho N, A, B. Tìm số nhỏ nhất > N chỉ chứa chữ số A và B với số lượng A = số lượng B.

Ví dụ

N=1234, A=2, B=3 → 2233 (có 2 chữ số 2 và 2 chữ số 3)

Thuật toán đệ quy/backtracking

  • Xây dựng số từ trái sang phải.
  • Giữ đếm countA, countB.
  • Khi độ dài chẵn và countA == countB và số > N → cập nhật kết quả.
  • Thử thêm A và B đệ quy, lấy min.

Triển khai C++

#include <bits/stdc++.h>
using namespace std;

long long solve(long long cur, int A, int cA, int B, int cB, long long N) {
    if (cur > 1e11) return 1e11;
    if (cA == cB && cur >= N) return cur;
    return min(solve(cur*10 + A, A, cA+1, B, cB, N),
               solve(cur*10 + B, A, cA, B, cB+1, N));
}

int main() {
    long long N = 1234;
    int A = 2, B = 3;
    cout << solve(0, A, 0, B, 0, N) << endl; // 2233
    return 0;
}

Kết quả

2233