pta团体天梯赛L1-050

img


想知道有哪些测试数据


#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    string line="zzzzzz";
    int L,N;
    cin>>L>>N;
    if(N<0)
    {
        int m=pow(26,L);
        N=m+N;
    }
    int index=L-1,help_1=N,help_2;
    while(true)
    {
        if(N==0)
        {
            line="aaaaaa";
            break;
        }
        help_2=help_1%26;
        help_1=help_1/26;
        if(index==L-1 && help_2!=0)
            line[index]-=help_2-1;
        if(index!=L-1 && help_2!=0)
            line[index]-=help_2;
        if(help_2==0)
        {
            line[index]='a';
            line[index-1]-=help_1-1;
            break;
        }
        index--;
        if(help_1<26)
        {
            if(index==L-1)
                line[index]-=help_1-1;
            else
                line[index]-=help_1;
            break;
        }
    }
    for(int i=0;i<L;i++)
        cout<<line[i];
    return 0;
}

3个正确,1个错误,很可能是边界值处理有问题。参考下面的代码:


#include<iostream>
#include<math.h>
#include<string>
using namespace std;
int main()
{
    int l,n,m=1,x,y;
    char a[6];
   cin>>l>>n;
    
   
    m= pow(26,l);
    n=m-n;
    y=l;
    
    while(l--)
    {
        x=n%26;
        a[l]='a'+x;//第一次算出来的字符是字符串中的第L个的字符,第二次算出来的字符是字符串中的第L-1个字符
        n=n/26;
    }
    for(int i=0;i<y;i++)
        cout<<a[i]; //printf("%c",a[i]);//所以最后输出的时候是要倒着输出的
    return 0;
}