Hướng dẫn giải của F16: Năm đặc biệt


Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.

Hướng dẫn giải

Cho năm n có 4 chữ số, cần tìm năm nhỏ nhất lớn hơn n mà các chữ số của nó đôi một khác nhau.

Cách làm

Bắt đầu từ năm n+1 rồi thử lần lượt các năm tiếp theo. Với mỗi năm, dùng mảng đánh dấu 10 chữ số: nếu gặp chữ số đã xuất hiện thì năm đó không hợp lệ. Dừng lại khi tìm được năm mà mọi chữ số đều khác nhau. Đề đảm bảo đáp án luôn tồn tại.

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

// Kiểm tra tất cả các chữ số của số y có đôi một khác nhau hay không
bool chu_so_khac_nhau(int y) {
    // Đánh dấu các chữ số đã xuất hiện
    bool da_co[10];
    for (int d = 0; d < 10; d++) {
        da_co[d] = false;
    }
    while (y > 0) {
        int d = y % 10;
        if (da_co[d]) {
            return false;
        }
        da_co[d] = true;
        y = y / 10;
    }
    return true;
}

int main() {
    int n;
    cin >> n;
    // Thử lần lượt các năm lớn hơn n cho tới khi tìm được năm thỏa mãn
    int nam = n + 1;
    while (!chu_so_khac_nhau(nam)) {
        nam++;
    }
    cout << nam << "\n";
    return 0;
}

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.