问题描述
小明发明了一种给由全大写字母组成的字符串编码的方法。
对于每一个大写字母,小明将它转换成它在 26 个英文字母中序号,即 A → 1, B → 2, … Z →26。
这样一个字符串就能被转化成一个数字序列:比如 ABCXYZ
→ 123242526
。
现在给定一个转换后的数字序列,小明想还原出原本的字符串。
当然这样的还原有可能存在多个符合条件的字符串。
小明希望找出其中字典序最大的字符串。
输入格式
一个数字序列。
输出格式
一个只包含大写字母的字符串,代表答案
样例输入
123242526
样例输出
LCXYZ
数据范围
对于 20% 的评测用例,输入的长度不超过 20。
对于所有评测用例,输入的长度不超过 200000。
题解:
#include <iostream>
#include <cstring>
using namespace std;
const int N = 200010;
char op[27] = {'0',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
};
int main()
{
string s;
cin >> s;
string ans;
for (int i = 0; i < s.size(); i ++)
{
if(i + 1 < s.size())
{
int t = (s[i] - '0') * 10 + (s[i + 1] - '0');
if(t <= 26)
{
ans += op[t];
i ++;
}
else ans += op[s[i] - '0'];
}
else ans += op[s[i] - '0'];
}
cout << ans << endl;
return 0;
}
选择题:字符串编码
问题描述
小明发明了一种给由全大写字母组成的字符串编码的方法。
对于每一个大写字母,小明将它转换成它在 26 个英文字母中序号,即 A → 1, B → 2, … Z →26。
这样一个字符串就能被转化成一个数字序列:比如 ABCXYZ → 123242526。
现在给定一个转换后的数字序列,小明想还原出原本的字符串。
当然这样的还原有可能存在多个符合条件的字符串。
小明希望找出其中字典序最大的字符串。
输入格式
一个数字序列。
输出格式
一个只包含大写字母的字符串,代表答案
样例输入
123242526
样例输出
LCXYZ
数据范围
对于 20% 的评测用例,输入的长度不超过 20。
对于所有评测用例,输入的长度不超过 200000。
以下程序实现了这一功能,请你补全空白处内容:
#include <bits/stdc++.h>
using namespace std;
int main()
{
string in;
string re = "";
cin >> in;
int len = in.length();
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
{
__________________;
}
}
cout << re;
return 0;
}
A | re = re + char(temp + 'A' - 1); i += 2; |
B | re = re + char(temp + 'A'); i += 2; |
C | re = re + char(temp + 'A' - 1); i += 1; |
D | re = re + char(temp + 'A'); i += 1; |
答案:
re = re + char(temp + 'A' - 1);
i += 2;