zoukankan      html  css  js  c++  java
  • Luogu P1098 [NOIP2007 T2] 字符串的展开

     

    题解

      模拟+字符串

      展开的过程很容易实现,关键的坑是‘-’位置和判断是否展开

      输入可能出现-424-,j--e,p-8-l-6的情况

      具体情况看代码

    #include<cstdio>
    #include<cstring>
    using namespace std;
    char a[110],z,y;
    int main()
    {
        int l,i,j,k,p1,p2,p3;
        scanf("%d%d%d
    ",&p1,&p2,&p3);
        scanf("%s",a+1);
        l=strlen(a+1);
        for(i=1;i<=l;i++)
        {
            if(a[i]=='-')
            {
                z=a[i-1];y=a[i+1];
                if(i==1){printf("-");continue;}//如果第一个字符是-,跳过 
                else if(i==l){printf("-");continue;}//如果最后一个字符是-,跳过 
                else if(z=='-'||y=='-'){printf("-");continue;}//出现连续两个-,跳过 
                else if((z>='0'&&z<='9'&&y>='a'&&y<='z')||(y>='0'&&y<='9'&&z>='a'&&z<='z')){printf("-");continue;}//-左右不同时是字母或数字,不展开 
                else if(y-z==1)continue;//-左右连续,省略- 
                else if(y<=z){printf("-");continue;}
                else
                {
                    if(p1==3)//'*'填充 
                    {
                        for(j=z+1;j<y;j++)
                            for(k=1;k<=p2;k++)
                                printf("*");
                    }
                    else if(z>='0'&&z<='9')//数字填充 
                    {
                        if(p3==1)//正序 
                        for(j=z+1;j<y;j++)
                            for(k=1;k<=p2;k++)
                                printf("%c",j);
                        else//倒序 
                        for(j=y-1;j>z;j--)
                            for(k=1;k<=p2;k++)
                                printf("%c",j);
                    }
                    else//字母填充 
                    {
                        if(p1==1)//小写字母 
                        {
                            if(p3==1)//正序 
                            for(j=z+1;j<y;j++)
                                for(k=1;k<=p2;k++)
                                    printf("%c",j);
                            else//倒序 
                            for(j=y-1;j>z;j--)
                                for(k=1;k<=p2;k++)
                                    printf("%c",j);
                        }
                        else//大写字母 
                        {
                            z-=32;y-=32;//转大写字母 
                            if(p3==1)//正序 
                            for(j=z+1;j<y;j++)
                                for(k=1;k<=p2;k++)
                                    printf("%c",j);
                            else//倒序 
                            for(j=y-1;j>z;j--)
                                for(k=1;k<=p2;k++)
                                    printf("%c",j);
                        }
                    }
                }
            } 
            else printf("%c",a[i]);
        }
        return 0;
    } 
  • 相关阅读:
    ASP.NET Core重写个人博客站点小结
    HoloLens开发手记
    HoloToolkit项目源码剖析
    .NET Core手记
    HoloLens开发手记
    HoloLens开发手记
    HoloLens开发手记
    对象序列化为何要定义serialVersionUID的来龙去脉
    jdbc连接sqlserver报错java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
    Javascript eval()函数 基础回顾
  • 原文地址:https://www.cnblogs.com/wisdom-jie/p/13589108.html
Copyright © 2011-2022 走看看