字符串的展开

30:字符串的展开
    总时间限制:1000ms  内存限制:65536kB
描述
    在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“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”。
输入
    包括两行:
    第1行为用空格隔开的3个正整数,一次表示参数p1,p2,p3。
    第2行为一行字符串,仅由数字、小写字母和减号“-”组成。行首和行末均无空格。

    40%的数据满足:字符串长度不超过5;
    100%的数据满足:1<=p1<=3,1<=p2<=8,1<=p3<=2。字符串长度不超过100。
输出
    只有一行,为展开后的字符串。
样例输入
    样例 #1:
    1 2 1
    abcs-w1234-9s-4zz
    样例 #2:
    2 3 2
    a-d-d
    样例 #3:
    3 4 2
    di-jkstra2-6
样例输出
    样例 #1:
    abcsttuuvvw1234556677889s-4zz
    样例 #2:
    aCCCBBBd-d
    样例 #3:
    dijkstra2************6
来源
    NOIP2007复赛 提高组 第二题

分析:

     这种复杂的模拟题一般要按照题目的意思分若干种情况讨论处理,最好先处理简单的情况。

这里要注意:减号可能是连续出现的。开头和结尾也可能有减号。

 1 #include<stdio.h>
 2 #include<string.h>
 3 int main(int argc, char *argv[])
 4 {
 5     int p1,p2,p3;
 6     char a[105];
 7     int i,len;
 8     char begin,end;
 9     int j;
10     freopen("30.in","r",stdin);
11     scanf("%d%d%d",&p1,&p2,&p3);
12     scanf("%s",a);
13     len=strlen(a);
14 
15     i=0;
16     while(a[i]!='\0')
17     {
18         if(a[i]!='-') printf("%c",a[i]);  //如果是字母或数字直接输出
19         else
20         {
21             if( i-1<0||i+1>=len ) printf("-");//如果减号左边或右边越界则直接输出减号
22             else
23             {
24                 if( a[i-1]+1==a[i+1]) ;//空语句,什么都不做。减号左边和右边是连续字符,删除减号
25                 else if(a[i-1]>=a[i+1]) printf("-");//减号左边大于或等于右边不用扩展
26                 else if( ! (a[i-1]>='0'&&a[i-1]<='9'&&a[i+1]>='0'&&a[i+1]<='9' || a[i-1]>='a'&&a[i-1]<='z'&&a[i+1]>='a'&&a[i+1]<='z') )
27                     printf("-"); //减号左边和右边不是同是字母或数字不用扩展
28                 else
29                 {   //下面对begin和end的赋值只是用于控制循环范围 
30                     if(a[i-1]>='a'&&a[i-1]<='z')
31                     {
32                         if(p1==1) //填充小写字母
33                         {
34                             begin=a[i-1]+1;
35                             end=a[i+1];
36                         }
37                         else if(p1==2) //填充大写字母
38                         {
39                             begin=a[i-1]-32+1;
40                             end=a[i+1]-32;
41                         }
42                         else if(p1==3) //填充星号“* " .
43                         {
44                             begin=a[i-1]+1;
45                             end=a[i+1];
46                         }
47                     }
48                     else   //填充数字
49                     {
50                         begin=a[i-1]+1;
51                         end=a[i+1];
52                     }
53 
54                     if(p3==1)//顺序填充
55                     {
56                         for(;begin<end;begin++)
57                         {
58                             for(j=0;j<p2;j++)
59                             {
60                                 if(p1==3) printf("*");
61                                 else printf("%c",begin);
62                             }
63                         }
64                     }
65                     else//逆序填充
66                     {
67                         for(--end;end>=begin;end--)
68                         {
69                             for(j=0;j<p2;j++)
70                             {
71                                 if(p1==3) printf("*");
72                                 else printf("%c",end);
73                             }
74                         }
75                     }
76                 }
77             }
78         }
79 
80         i++;
81     }
82     return 0;
83 }

 

转载于:https://www.cnblogs.com/huashanqingzhu/p/5078805.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491438.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab画图显示中文

title(标题1,FontName,Microsoft YaHei UI)

Hadoop分布式集群搭建详细过程

1. 首先用五台机器搭建分布式&#xff0c;一个为master&#xff0c;剩下四个分别为slave01、slave02、slave03&#xff0c; slave04。 2. 修改机器名 五台机器分别都执行sudo vim /etc/hostname命令&#xff0c;将文件中的内容分别改为master、slave01、slave02、slave03&…

徐匡迪、潘云鹤等纷纷撰文,关于人工智能的最新判断都在这里了

来源&#xff1a;《前沿科学》编者按人工智能&#xff0c;近年来成为世界主要发达国家战略中的战略&#xff0c;力争抢占新一轮科技革命的制高点。在移动互联网、大数据、超级计算、传感网、脑科学等新理论新技术的驱动下&#xff0c;新一代人工智能加速发展&#xff0c;不断拓…

HDU 5600(瞎搞)

第一场Bestcoder居然爆零。。果然是too naive。。小聪明全部直接输出“YES”过了pretest&#xff0c;结果被叉也是&%$% 找到规律传递下就好。后来看官方题解感觉逼格好高。。然而就是瞎搞&#xff0c;找找规律就好 #include"cstdio" #include"queue" #…

常见25种深度学习模型的github代码

1 Feed forward neural networks (FF or FFNN) and perceptrons (P) 前馈神经网络和感知机&#xff0c;信息从前&#xff08;输入&#xff09;往后&#xff08;输出&#xff09;流动&#xff0c;一般用反向传播&#xff08;BP&#xff09;来训练。算是一种监督学习。 对应的代…

CCAI 2019 | 郑南宁:“自觉性AI技术”可助力无人驾驶

来源&#xff1a;人工智能前沿讲习CCAI 20192019年中国人工智能大会&#xff08;Chinese Congress on Artificial Intelligence 2019&#xff0c;简称“CCAI 2019”&#xff09;将于在9月21日-22日在青岛胶州召开。谷歌、特斯拉&#xff0c;百度、滴滴、蔚来……如今从国外到国…

使用Hadoop自带的例子wordcount实现词频统计

Hadoop中自带的hadoop-mapreduce-examples-2.7.6.jar含有一些事例&#xff0c;本文将用wordcount实现词频统计。具体步骤如下&#xff1a; 1. 启动Hadoop 切换到Hadoop安装目录下的sbin目录下执行./start-all.sh命令 或执行./start-dfs.sh和./start-yarn.sh两条命令 2. 在集群…

使用iozone和bonnie测试磁盘IO

测试linux设备的磁盘IO可以用的工具有很多&#xff0c;主要使用的是iozone和bonnie 1.iozone 安装&#xff1a; 1.下载放到/root目录下&#xff0c;解压文件夹 2.cd iozone3_434/src/current 3.make linux 使用&#xff1a; ./iozone -Rab /root/iozone.xls -s 2G -i 0 -i 1 -y…

使用Hadoop自带的例子pi计算圆周率

Hadoop中自带的hadoop-mapreduce-examples-2.7.6.jar含有一些事例&#xff0c;本文将用pi计算圆周率。若想了解其计算原理&#xff0c;参考&#xff1a;http://thinkinginhadoop.iteye.com/blog/710847。 具体步骤如下&#xff1a; 1. 启动Hadoop 切换到Hadoop安装目录下的sb…

.net core 生成jwt+swagger-通过 IHttpContextAccessor读取token信息

1.安装jwt相关包 <ItemGroup><PackageReference Include"Microsoft.AspNetCore.Authentication.JwtBearer" Version"6.0.25" /><PackageReference Include"Microsoft.IdentityModel.Tokens" Version"7.0.3" /><P…

NATURE 人工智能 | 神奇的粒子机器人

没想到吧&#xff0c;像细胞一样自由组合灵活多变的机器人正在从科幻电影中走出来。就像在伤口愈合是活细胞聚集并集体迁移的过程。在生物系统中&#xff0c;群体的大规模集体迁移是通过组件的耦合和协调来实现的&#xff0c;在伤口愈合的过程中&#xff0c;活细胞聚集并集体迁…

表单校验---struts2

一 写validate方伐 1 让你的Action继承ActionSupport类&#xff0c; 重写validate方法&#xff0c;&#xff08;或validateXxxx&#xff09; 判断&#xff0c;写入错误信息 jsp中用标签显示&#xff0c;struts。xml中配置转向的页面 package he.action;import java.util.Map;…

城市大脑与智慧城市前沿趋势

近年来&#xff0c;智慧城市建设出现新的动向&#xff0c;包括城市大脑、城市云脑、城市超级大脑、城市超脑、城市神经网络等“泛城市大脑”概念也大量涌现。杭州、上海、北京、广州等城市各自提出和开展了不同城市大脑建设方案&#xff0c;其中上海市开展了以建设城市神经元系…

python画图去掉边框

axplt.subplot(2,3,1) ... ax.spines[top].set_visible(False) ax.spines[right].set_visible(False) ax.spines[bottom].set_visible(False) ax.spines[left].set_visible(False)

在iOS 8中使用UIAlertController

iOS 8的新特性之一就是让接口更有适应性、更灵活&#xff0c;因此许多视图控制器的实现方式发生了巨大的变化。全新的UIPresentationController在实现视图控制器间的过渡动画效果和自适应设备尺寸变化效果&#xff08;比如说旋转&#xff09;中发挥了重要的作用&#xff0c;它有…

MapReduce分析NCDC 年气象数据最低温度与最高温度

利用hadoop计算技术对采集的气象数据信息进行处理&#xff0c;主要分两个阶段&#xff1a;mapper阶段和reducer阶段&#xff0c;mapper阶段主要是对日志文件进行按行读取并进行字符串截取&#xff0c;reducer阶段对mapper阶段传过来的数据进行大小比较&#xff0c;最终获取每一…

非侵入脑机接口新突破!用意念控制光标,连续追踪效果提升5倍

来源&#xff1a;智东西看点&#xff1a;CMU研究人员在使用非侵入式脑机接口开发了第一个成功用意念控制的机械臂&#xff0c;展现了连续追踪和跟踪计算机光标的能力。智东西6月23日消息&#xff0c;卡内基梅隆大学与明尼苏达大学的研究人员在非侵入式机器人设备控制领域取得了…

python用Matplotlib画箭头

plt.annotate(text,xy(tx0,ty0),xytext(tx1,ty1),arrowpropsdict(arrowstyle"->",connectionstyle"arc3")) 其中&#xff0c;text是在箭头末尾显示的文字&#xff0c;xy是箭头终点坐标&#xff0c;xytext是起点坐标&#xff0c;arrowtypes指定箭头的样…