欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

PAT天梯赛 L1-050 倒数第N个字符串

发布时间:2025/6/16 编程问答 50 豆豆
生活随笔 收集整理的这篇文章主要介绍了 PAT天梯赛 L1-050 倒数第N个字符串 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

题目链接:点击打开链接

给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增。例如当 L 为 3 时,序列为 { aaa, aab, aac, ..., aaz, aba, abb, ..., abz, ..., zzz }。这个序列的倒数第27个字符串就是 zyz。对于任意给定的 L,本题要求你给出对应序列倒数第 N 个字符串。

输入格式:

输入在一行中给出两个正整数 L(2 <= L <= 6)和 N(<= 105)。

输出格式:

在一行中输出对应序列倒数第 N 个字符串。题目保证这个字符串是存在的。

输入样例:3 7417 输出样例:pat 思路:一直没有思路。最后10分钟用n对26取余的思路,得了9分。

附上9分代码:#include<iostream> #include<algorithm> using namespace std;int main() {int l, num;int r;string temp;cin >> l >> num;while(num > 0) {r = num % 26;char c = 'z' - r;temp += c;num /= 26;}temp[0] = temp[0] + 1;reverse(temp.begin(), temp.end());cout << temp; }

后来看了网上的题解,其中一个比较好理解。
AC代码://把倒着数转化为正着数//也就是进制问题 #include<iostream> using namespace std;char a[10];int f(int x) {//进制int sum = 1;for(int i = 0; i < x; i ++) {sum *= 26;}return sum; } int main() {int l, n;cin >> l >> n;int l1 = f(l);int x = l1 - n;//得到正数第几个int j = 0;for(int i = l -1; i >= 0; i--) {a[j] = x/f(i) + 'a';//依次得到所有的 除数 + ‘a’x = x % f(i); //余数为新值j++;}for(int i = 0; i < l; i++) {cout << a[i];}return 0; }

转载于:https://www.cnblogs.com/ACMerszl/p/9573008.html

总结

以上是生活随笔为你收集整理的PAT天梯赛 L1-050 倒数第N个字符串的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。