PAT - 天梯赛 L1-050 倒数第N个字符串
2018-04-04 11:24
239 查看
L1-050. 倒数第N个字符串
时间限制400 ms内存限制65536 kB
代码长度限制8000 B
判题程序Standard作者陈越
给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 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思路:直接倒着对26取余,转化为26进制。然后之间用z - 对应的数字 直接输出就可以了
但是要注意的是 如果正好是26的整数倍是 如:倒数第26个 应该是zza,但是转化成26进制就是010 其实应该是00 26。#include<cstdio>
#include<cstring>
using namespace std;
int main(){
int n, m, flag = 0, k;
int arr[20];
scanf("%d%d", &n, &m);
memset(arr, 0, sizeof(arr));
k = n-1;
for(int i = n; i >= 0; i--){//转化为26进制
if(m == 0) break;
int x = m % 26;
if(x == 0 && !flag) arr[i] = 26; // 要考虑 正好可以整除26时
else{ //一直遇到第一个除以26 余数不为0的 这个位数之前的应该全为a。 就像 10人为一对 第100个 是第10队的最后一个 而不是第11队
arr[i] = x;
if(!flag){
flag = 1;
k = i;
}
}
m /= 26;
}
char ch = 'z';
for(int i = 1; i <= n; i++){
if(i >= k){
printf("%c", ch - arr[i] + 1);
}
else printf("%c", ch - arr[i]);
}
return 0;
}
相关文章推荐
- PAT 天梯赛 L1-050. 倒数第N个字符串 【字符串】
- PAT L1-050. 倒数第N个字符串
- 【PAT】L1-050. 倒数第N个字符串【C语言实现】
- PAT 团体程序设计天梯赛 倒数第N个字符串
- L1-050. 倒数第N个字符串
- PAT-2018 L1-050. 倒数第N个字符串
- L1-050. 倒数第N个字符串
- C++:L1-050. 倒数第N个字符串
- L1-050. 倒数第N个字符串
- L1-050. 倒数第N个字符串
- PAT 天梯赛 L1-032. Left-pad 【字符串】
- L1-050. 倒数第N个字符串 天梯赛
- PAT 天梯赛 L1-027. 出租 (简单字符串处理)
- PAT 天梯赛 L1-054. 福到了 【字符串】
- 天梯赛 倒数第n个字符串
- PAT L1 050 倒数第N个字符串 (递归/模拟)
- PAT 天梯赛 L1-039. 古风排版 【字符串处理】
- PAT 天梯赛 L1-025. 正整数A+B 【字符串处理】
- L1-2 倒数第N个字符串
- PAT 天梯赛 L1-002 【递归】