zoukankan      html  css  js  c++  java
  • CODE[VS] 1165 字符串的展开 || P1098 字符串的展开

    题目描述 Description

    【问题描述】
    在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输
    入的字符串中,含有类似于“d-h”或“4-8”的子串,我们就把它当作一种简写,输出时,用连续
    递增的字母或数字串替代其中的减号,即,将上面两个子串分别输出为“defgh”和“45678”。在
    本题中,我们通过增加一些参数的设置,使字符串的展开更为灵活。具体约定如下:
    (1)遇到下面的情况需要做字符串的展开:在输入的字符串中,出现了减号“-”,减号两侧
    同为小写字母或同为数字,且按照ASCII 码的顺序,减号右边的字符严格大于左边的字符。
    (2)参数p1:展开方式。p1=1 时,对于字母子串,填充小写字母;p1=2 时,对于字母子串,

    填充大写字母。这两种情况下数字子串的填充方式相同。p1=3 时,不论是字母子串还是数字子串,
    都用与要填充的字母个数相同的星号“*”来填充。
    (3)参数p2:填充字符的重复个数。p2=k 表示同一个字符要连续填充k 个。例如,当p2=3
    时,子串“d-h”应扩展为“deeefffgggh”。减号两侧的字符不变。
    (4)参数p3:是否改为逆序:p3=1 表示维持原有顺序,p3=2 表示采用逆序输出,注意这时
    仍然不包括减号两端的字符。例如当p1=1、p2=2、p3=2 时,子串“d-h”应扩展为“dggffeeh”。
    (5)如果减号右边的字符恰好是左边字符的后继,只删除中间的减号,例如:“d-e”应输出
    为“de”,“3-4”应输出为“34”。如果减号右边的字符按照ASCII码的顺序小于或等于左边字符,
    输出时,要保留中间的减号,例如:“d-d”应输出为“d-d”,“3-1”应输出为“3-1”。

    输入描述 Input Description

    第 1 行为用空格隔开的3 个正整数,依次表示参数p1,p2,p3。
    第 2 行为一行字符串,仅由数字、小写字母和减号“-”组成。行首和行末均无空格。

    输出描述 Output Description

    输出只有一行,为展开后的字符串。

    样例输入 Sample Input

    【输入输出样例1】
    1 2 1
    abcs-w1234-9s-4zz

    【输入输出样例2】
    2 3 2
    a-d-d

    【输入输出样例3】
    3 4 2
    di-jkstra2-6

    样例输出 Sample Output

    【输入输出样例1】

    abcsttuuvvw1234556677889s-4zz

    【输入输出样例2】

    aCCCBBBd-d

    【输入输出样例3】

    dijkstra2************6

    数据范围及提示 Data Size & Hint

    【限制】
    40%的数据满足:字符串长度不超过5
    100%的数据满足:1<=p1<=3, 1<=p2<=8, 1<=p3<=2。字符串长度不超过100

    zhei就是一个模拟,字符串。

    但模拟的思路,过程有很多种。

    就是要注意把所有的特殊情况都考虑全面了吧。

    ac代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<algorithm>
     5 #include<cstring>
     6 using namespace std;
     7 int x,y,z;
     8 char c[105];
     9 int main()
    10 {
    11     scanf("%d%d%d",&x,&y,&z);
    12     cin>>c+1;
    13     int l=strlen(c+1);
    14     for(int i=1; i<=l; i++)
    15     {
    16         if(c[i]=='-'&&i==1)
    17         {
    18             printf("%c",c[i]);
    19             continue;
    20         }
    21         if(c[i]=='-'&&c[i+1]=='-'||c[i]=='-'&&c[i-1]=='-')
    22         {
    23             printf("-");
    24             continue;
    25         }
    26         if(c[i]=='-'&&i==l)
    27         {
    28             printf("-");
    29             return 0;
    30         }
    31         if(c[i]!='-')
    32             printf("%c",c[i]);
    33         else
    34         {
    35             if((c[i-1]>=48&&c[i-1]<=57&&c[i+1]>=97)||(c[i-1]>=97&&c[i+1]>=48&&c[i+1]<=57))
    36                 printf("%c",c[i]);
    37             else
    38             {
    39                 if(c[i+1]==c[i-1]+1) continue;
    40                 if(c[i-1]>=c[i+1])
    41                     printf("%c",c[i]);
    42                 if(x==1&&z==1)
    43                     for(int j=c[i-1]+1; j<c[i+1]; j++)
    44                         for(int k=1; k<=y; k++)
    45                             printf("%c",j);
    46                 if(x==1&&z==2)
    47                     for(int j=c[i+1]; j>c[i-1]+1; j--)
    48                         for(int k=1; k<=y; k++)
    49                             printf("%c",j);
    50                 if(x==2&&z==1)
    51                 {
    52                     if(c[i-1]>=48&&c[i-1]<=57)
    53                         for(int j=c[i-1]+1; j<c[i+1]; j++)
    54                             for(int k=1; k<=y; k++)
    55                                 printf("%c",j);
    56                     else
    57                     {
    58                         for(int j=c[i-1]+1-32; j<c[i+1]-32; j++)
    59                             for(int k=1; k<=y; k++)
    60                                 printf("%c",j);
    61                     }
    62                 }
    63                 if(x==2&&z==2)
    64                 {
    65                     if(c[i-1]>=48&&c[i-1]<=57)
    66                         for(int j=c[i+1]-1; j>c[i-1]; j--)
    67                             for(int k=1; k<=y; k++)
    68                                 printf("%c",j);
    69                     else
    70                     {
    71                         for(int j=c[i+1]-32-1; j>c[i-1]-32; j--)
    72                             for(int k=1; k<=y; k++)
    73                                 printf("%c",j);
    74                     }
    75                 }
    76                 if(x==3)
    77                     for(int j=c[i-1]+1-32; j<c[i+1]-32; j++)
    78                         for(int k=1; k<=y; k++)
    79                             printf("*");
    80             }
    81         }
    82     }
    83     return 0;
    84 }
  • 相关阅读:
    STM32F103 rtthread工程构建
    Alios-Things的学习与使用(1)
    AM335X用RGB888连接LCD如何以16位色彩模式显示图片
    为什么要网页模块化?
    前端应该了解的颜色的寓意
    iOS 8安装教程图解
    windows8开发-关于wp7应用迁移到win8 metro风格
    短小强悍的JavaScript异步调用库
    Linux启动过程分析
    小技能——markdown
  • 原文地址:https://www.cnblogs.com/Mary-Sue/p/9166989.html
Copyright © 2011-2022 走看看