题目
麻烦思路(暴搜)
直接建一棵字典查找树把答案暴力搜索出来。
#include<bits/stdc++.h>
using namespace std;
char c[10], ans[10];
int L, N, cnt = 0, f = 0;
void dfs(int bit) {
if (f)return;
if (bit == L) {
cnt++;
if (cnt == N) {
f = 1;
for (int i = 0; i < L; i++)ans[i] = c[i];
}
return;
}
for (int i = 0; i < 26; i++) {
c[bit] = 'z' - i;
if (!f)dfs(bit + 1);
}
}
int main()
{
cin >> L >> N;
for (int i = 0; i < L; i++)c[i] = 'z';
dfs(0);
cout << ans << endl;
return 0;
}
巧妙思路(26进制)
其实只含有小写字母的字典序排列就是按照26进制的规则进行的,那么只需要求出这一字符串对应的26进制数,再将26进制数逆向转换为字符串即可。
#include<bits/stdc++.h>
using namespace std;
int L, N;
char s[10];
int main()
{
cin >> L >> N;
int ans = pow(26, L) - N;
for (int i = 0; i < L; i++) {
s[i] = 'a' + ans % 26, ans /= 26;
}
for (int i = L - 1; i >= 0; i--)cout << s[i];
return 0;
}