译码
译码
https://ac.nowcoder.com/acm/contest/19306/1046
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
现在定义一种编码规则:对于长度为3的字符串(均由小写字母组成),首先按照字典序进行排序,即aaa,aab,aac,…,zzz,
将这些字符串按照顺序依次从00001至17575编码(前缀0不可省略),即aaa=00000,aab=00001,aac=00002,…,zzz=17575。
现在给出一串数字,请你通过计算输出这串数字对应的原字符串。(输入保证该数字长度为5的倍数)
例如输入000021757511222,每五位编号对应于一个字符串
编号00002对应字符串 aac
编号17575对应字符串 zzz
编号11222对应字符串 qpq
输入描述:
输入第一行包含一个整数T,代表测试案例个数。(0 < T ≤10) 接下来每个测试案例包括两行,第一行为一个整数length(0<length<=100),代表数字串的长度,第二行为长度为length的数字串。
输出描述:
输出数字串对应的原字符串。
示例1
输入
2 10 0000000001 15 000021757511222
输出
aaaaab aaczzzqpq
#include<iostream> #include<cstring> using namespace std; int main() { int t; cin>>t; while(t--) { int n; cin>>n;//整数长度n for(int i=1;i<=n/5;i++)//每5个一组分别统计 共有n/5组 { int ans=0; for(int j=1;j<=5;j++)//每组长度为5的数字字符串 按单个字符方式输入 { char c; cin>>c; ans=ans*10+c-'0';//把每个数字字符变成数字再组合成数字(最终组合成的数值范围为0-17575) } char a[3]={0}; for(int j=2;j>=0;j--)//注意顺序 最后一个字符先赋值 { a[j]=char(97+ans%26);//对应的字符赋值 ans=ans/26; } for(int j=0;j<3;j++) cout<<a[j]; } cout<<endl; } return 0; }