各位大哥,请求出手相助..样例,下载的数据能过,为啥洛谷只过了4个测试点。。
查看原帖
各位大哥,请求出手相助..样例,下载的数据能过,为啥洛谷只过了4个测试点。。
409865
zzzysd楼主2021/3/11 20:32
#include<stdio.h>
int a, b, c;
char result[200];
int getfill(char, char,int); //最终结果都是写入result中,此函数用于得到应扩展开的部分
int main(void)
{
    scanf("%d%d%d", &a, &b, &c);
    char string[100],ch;
    int i = 0;
    getchar();
    getchar();
    while((ch=getchar())!='\n')
        string[i++] = ch;
    char front, back;
    int j = 0,q;
    q = i - 1;
    i = 0;
    while(string[i])
    {
        if(string[i]=='-')
        {
            if(i==0||i==q){       //首尾的-
                result[j++] = '-';
                i++;
                continue;
            }
            front = string[i - 1], back=string[i + 1];
            //连续的-
            if(front=='-'||back=='-'){
                result[j++] = '-';
                i++;
                continue;
            }
            if((front<='z'&&front>='a'&&back<='z'&&back>='a')||(front<='9'&&front>='0'&&back<='9'&&back>='0'))
            {
                if(front>=back)
                {
                    result[j++] = string[i++];
                }
                else if(back-front==1)
                {
                    //result[j++] = string[i + 1];
                    i++;
                }
                else
                {
                    j=getfill(front,back,j);
                    i++;                         //数组的指头要向下一位移动,每一步操作后
                }
                continue;
                }
                else
            {
                result[j++]=string[i++];           //j要和函数中的k续上
                continue;
            }
        }
        else
            result[j++] = string[i++];
    }
    i = 0;
    while(result[i])
        printf("%c", result[i++]);
    return 0;
}
int getfill(char front,char back,int k)
{
    char ch = front + 1,fill[100];
    int i = 0, j = 0;
    if(a==3)
    {
        for (; i < back - front-1;i++)
            fill[i] = '*';
    }
    else if(a==1)
    {
        for (; ch < back;ch++)
            for (i = 0; i < b;i++)
                fill[j++] = ch;
    }
    else if(a==2)
    {
        ch = front - 'a' + 'A' + 1;
        for (; ch < back+'A'-'a';ch++)
            for (i = 0; i < b;i++)
                fill[j++] = ch;
    }
    j--;
    if(c==1)
    {
        for (i = 0; i <= j;)
            result[k++] = fill[i++];
    }
    else if(c==2)
    {
        for (; j >=0;)
            result[k++] = fill[j--];
    }
    return k;
}
2021/3/11 20:32
加载中...