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

In Số Lớn Nhất Nhỏ Hơn Số Cho Trước Với Các Chữ Số Khác Nhau Trong C++


Trong bài toán này, chúng ta được cho một số n. Nhiệm vụ là in ra số lớn nhất nhỏ hơn n sao cho tất cả các chữ số của nó đều khác nhau.

Ví dụ để hiểu vấn đề:

Đầu vào: n = 2332 → Đầu ra: 2319

Để giải quyết, ta đếm ngược từ n xuống 0. Kiểm tra từng số xem có chữ số khác nhau không. Nếu thỏa mãn thì in ra và dừng. Vòng lặp chạy tối đa n lần.

Ví Dụ

Chương trình triển khai giải pháp:

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

int findDistinctDigitNumber(int n) {
    for (int i = n - 1; i >= 0; i--) {
        int count[10] = { 0 };
        int x = i;
        int count1 = 0, count2 = 0;
        while (x) {
            count[x % 10]++;
            x /= 10;
            count1++;
        }
        for (int j = 0; j < 10; j++) {
            if (count[j] == 1)
                count2++;
        }
        if (count1 == count2)
            return i;
    }
    return -1;
}

int main() {
    int n = 44324;
    cout << "Số nhỏ hơn " << n << " với tất cả chữ số khác nhau: " << findDistinctDigitNumber(n);
    return 0;
}

Đầu Ra

Số nhỏ hơn 44324 với tất cả chữ số khác nhau là: 43987