第十一届蓝桥杯省赛C/C++大学B组 第一场 大家好,我叫亓官劼(qí guān jié ) 试题 I: 字符串编码 时间限制: 1.0s 内存限制: 512.0MB 本题总分:25 分 【问题描述】 小明发明了一种给由
第十一届蓝桥杯省赛C/C++大学B组 第一场
大家好,我叫亓官劼(qí guān jié )
试题 I: 字符串编码
时间限制: 1.0s 内存限制: 512.0MB 本题总分:25 分
【问题描述】
小明发明了一种给由全大写字母组成的字符串编码的方法。对于每一个大
写字母,小明将它转换成它在 26 个英文字母中序号,即 A → 1, B → 2, … Z →
26。
这样一个字符串就能被转化成一个数字序列:
比如 ABCXYZ → 123242526。
现在给定一个转换后的数字序列,小明想还原出原本的字符串。当然这样
的还原有可能存在多个符合条件的字符串。小明希望找出其中字典序最大的字
符串。
【输入格式】
一个数字序列。
【输出格式】
一个只包含大写字母的字符串,代表答案
【样例输入】
123242526
【样例输出】
LCXYZ
【评测用例规模与约定】
对于 20% 的评测用例,输入的长度不超过 20。
对于所有评测用例,输入的长度不超过 200000。
试题I 题解
#include <iostream>#include <vector>
using namespace std;
int main(){
string in ;
cin>>in;
int len = in.length();
string re = "";
int flag_1;//第一位为1
int flag_2;//第一位为2
flag_1 = flag_2 = 0;
for(int i = 0;i < len;i++){
if(flag_1){
int mid = int(in[i-1]-'0')*10+int(in[i]-'0');
re += char(mid+'A'-1);
flag_1 = 0;
continue;
}
if(flag_2){
if(in[i]<='6'){
int mid = int(in[i-1]-'0')*10+int(in[i]-'0');
re += char(mid+'A'-1);
flag_2 = 0;
} else{
re += char(in[i-1] - '0' +'A'-1);
re += char(in[i] - '0' +'A'-1);
flag_2 = 0;
}
continue;
}
if(in[i] >= '3')
re += char(in[i] - '0' + 'A' - 1);
if(in[i] == '1' ){
if(i+2<=len-1 && in[i] == '0'){
re += char(in[i] - '0' + 'A' - 1);
continue;
}
flag_1 = 1;
}
if(in[i] == '2'){
if(i+2<=len-1 && in[i] == '0'){
re += char(in[i] - '0' + 'A' - 1);
continue;
}
flag_2 = 1;
}
}
cout<<re;
return 0;
}
C++解法二
#include <iostream>#include <vector>
using namespace std;
int main(){
string in;
string re = "";
cin>>in;
int len = in.length();
// 为字符串增加一位,防止溢出,且不让他与最后一位联合后的值小于26
in = in + 'Z';
for(int i = 0 ; i < len ;){
int temp = int(in[i] - '0') * 10 + int(in[i+1] - '0');
if(temp > 26){
re = re + char(in[i] - '0' + 'A' -1);
i++;
}else{
re = re + char(temp + 'A' -1);
i += 2;
}
}
cout<<re;
return 0;
}
Python解法
a = input()len = a.__len__()
# 末尾加个字符,但是len还是之前的len,这样可以防止处理之后越界
a = a + 'Z'
i = 0
re = ""
while( i < len):
temp = int(a[i]) * 10 + int(a[i+1])
# 连续两个无法连续
if(temp > 26):
re = re + chr(int(a[i]) + 65 -1)
i = i + 1
else:
re = re + chr(temp + 65 -1)
i = i + 2
print(re)