题目链接:点击打开链接

 

现在定义一种编码规则:对于长度为3的字符串(均由小写字母组成),首先按照字典序进行排序,即aaa,aab,aac,…,zzz, 

将这些字符串按照顺序依次从00001至17575编码(前缀0不可省略),即aaa=00000,aab=00001,aac=00002,…,zzz=17575。 

现在给出一串数字,请你通过计算输出这串数字对应的原字符串。(输入保证该数字长度为5的倍数) 

例如输入000021757511222,每五位编号对应于一个字符串 

编号00002对应字符串 aac 

编号17575对应字符串 zzz 

编号11222对应字符串 qpq 

故输出为 aaczzzqpq

输入描述:

输入第一行包含一个整数T,代表测试案例个数。(0 < T ≤10)

接下来每个测试案例包括两行,第一行为一个整数length(0<length<=100),代表数字串的长度,第二行为长度为length的数字串。

输出描述:

输出数字串对应的原字符串。

示例1 

 

输入

2

10

0000000001

15

000021757511222

 

输出

aaaaab

aaczzzqpq

我的代码:

#include<bits/stdc++.h>
#include<cstring>
using namespace std;
string a[17576];
int ans[100];
void pass_list(){                       //把"aaa"~"zzz"先打个表。
    string b="aaa";
    for(int i=0;i<=17575;i++){
        a[i]=b;
        b[2]+=1;
        {
            if(b[2]==('z'+1)){
                b[2]='a';
                b[1]+=1;
                {
                    if(b[1]==('z'+1)){
                       b[1]='a';
                       b[0]+=1;
                    }
                }
            }
        }
    }
}
int main(){
    pass_list();
    int t,n,m,i,j;
    cin>>t;
    string c;
    while(t--){
        cin>>n; cin>>c;
        j=0;
        int flag,wei;
        memset(ans,0,sizeof(ans));
        for(i=0;i<n/5;i++){
             flag=0;wei=10000;
             while(j<n){
             ans[i]+=(c[j]-'0')*wei;   //字符串每隔5位截取为一个数字
             wei/=10;
             j++;flag++;
             if(flag==5)
              break;
             }
        }
        for(int i=0;i<n/5;i++){
            cout<<a[ans[i]];          //对应数字的表直接输出就行了
        }
        cout<<endl;
    }
    return 0;
}

看看这题AC排行榜第一的代码:

#include <stdio.h>
int main()
{
    int t, ans, n;
    char str[110], s[4];
    scanf("%d", &t);
    while (t--)
    {
        scanf("%d%s", &n, str);
        for (int i = 0; i < n; i += 5)
        {
            ans = 0;
            for (int j = 0; j < 5; j++)
                ans = ans * 10 + str[i + j] - '0';
            s[0] = 'a' + ans / 676;
            s[1] = 'a' + ans % 676 / 26;
            s[2] = 'a' + ans % 676 % 26;
            printf("%s", s);
        }
        printf("\n");
    }
    return 0;
}

怎么人家就那么聪明那!!!!QAQ