本题关键在于将整形大批量的转为字符串不足5位的用0补齐
实现方法很多,个人推荐用 format 来格式化,但是目前牛客不支持c++20用不了
string s = format("{:05}", i);
所以考虑使用while,将不足5位的字符串前方补0即可
判断一个字符串是不是5种字符组成的可以直接记录其中的元素数量,实现方法很多
#include <bits/stdc++.h> using namespace std; #define int long long const int N = 2e5 + 5; int __t = 1, n; vector<string> good; bool ck(string s) { map<char, int> mp; for (auto i : s) mp[i]++; if (mp.size() == 5) return 1; return 0; } void solve() { cin >> n; for (int i = 99999; i >= 0; i--) { // string s = format("{:05}", i); string s = to_string(i); while (s.length() < 5) s = '0' + s; if (ck(s)) good.push_back(s); } cout << good[n - 1] << '\n'; return; } int32_t main() { #ifdef ONLINE_JUDGE ios::sync_with_stdio(false); cin.tie(0); #endif // cin >> __t; while (__t--) solve(); return 0; }