1.7编程基础之字符串(30题)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
01:统计数字字符个数
∙
∙提交
∙统计
∙提问
总时间限制:
1000ms
内存限制:
65536kB
描述
输入一行字符,统计出其中数字字符的个数。
输入
一行字符串,总长度不超过255。
输出
输出为1行,输出字符串里面数字字符的个数。
来源
习题(7-1) 医学部2010 期末试题樊波
02:找第一个只出现一次的字符
∙
∙提交
∙统计
∙提问
总时间限制:
1000ms
内存限制:
65536kB
描述
给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。
如果没有,
输出no。
输入
一个字符串,长度小于100000。
输出
输出第一个仅出现一次的字符,若没有则输出no。
03:基因相关性
∙
∙提交
∙统计
∙提问
总时间限制:
1000ms
内存限制:
65536kB
描述
为了获知基因序列在功能和结构上的相似性,经常需要将几条不同序列的DNA进行
比对,以判断该比对的DNA是否具有相关性。
现比对两条长度相同的DNA序列。
首先定义两条DNA序列相同位置的碱基为一个
碱基对,如果一个碱基对中的两个碱基相同的话,则称为相同碱基对。
接着计算相同
碱基对占总碱基对数量的比例,如果该比例大于等于给定阈值时则判定该两条DNA
序列是相关的,否则不相关。
输入
有三行,第一行是用来判定出两条DNA序列是否相关的阈值,随后2行是两条DNA
序列(长度不大于500)。
输出
若两条DNA序列相关,则输出“yes”,否则输出“no”。
04:石头剪子布
描述
石头剪子布,是一种猜拳游戏。
起源于中国,然后传到日本、朝鲜等地,随着亚欧贸
易的不断发展它传到了欧洲,到了近现代逐渐风靡世界。
简单明了的规则,使得石头
剪子布没有任何规则漏洞可钻,单次玩法比拼运气,多回合玩法比拼心理博弈,使得
石头剪子布这个古老的游戏同时用于“意外”与“技术”两种特性,深受世界人民喜爱。
游戏规则:石头打剪刀,布包石头,剪刀剪布。
现在,需要你写一个程序来判断石头剪子布游戏的结果。
输入
输入包括N+1行:
第一行是一个整数N,表示一共进行了N次游戏。
1 <= N <= 100。
接下来N行的每一行包括两个字符串,表示游戏参与者Player1,Player2的选择(石
头、剪子或者是布):
S1 S2
字符串之间以空格隔开S1,S2只可能取值在{"Rock", "Scissors", "Paper"}(大小
写敏感)中。
输出
输出包括N行,每一行对应一个胜利者(Player1或者Player2),或者游戏出现平
局,则输出Tie。
提示
Rock是石头,Scissors是剪刀,Paper是布。
05:输出亲朋字符串
∙
∙提交
∙统计
∙提问
总时间限制:
1000ms
内存限制:
65536kB
描述
编写程序,求给定字符串s的亲朋字符串s1。
亲朋字符串s1定义如下:给定字符串s的第一个字符的ASCII值加第二个字符的
ASCII值,得到第一个亲朋字符;给定字符串s的第二个字符的ASCII值加第三个
字符的ASCII值,得到第二个亲朋字符;依此类推,直到给定字符串s的倒数第二
个字符。
亲朋字符串的最后一个字符由给定字符串s的最后一个字符ASCII值加s
的第一个字符的ASCII值。
输入
输入一行,一个长度大于等于2,小于等于100的字符串。
字符串中每个字符的ASCII
值不大于63。
输出
输出一行,为变换后的亲朋字符串。
输入保证变换后的字符串只有一行。
06:合法C 标识符
描述
给定一个不包含空白符的字符串,请判断是否是C语言合法的标识符号(注:
题目保证这些字符串一定不是C语言的保留字)。
C语言标识符要求:
1. 非保留字;
2. 只包含字母、数字及下划线(“_”)。
3. 不以数字开头。
输入
一行,包含一个字符串,字符串中不包含任何空白字符,且长度不大于20。
输出
一行,如果它是C语言的合法标识符,则输出yes,否则输出no。
来源
北京大学计算概论06 心理及信管期末考试
07:配对碱基链
∙
∙提交
∙统计
∙提问
总时间限制:
1000ms
内存限制:
65536kB
描述
脱氧核糖核酸(DNA)由两条互补的碱基链以双螺旋的方式结合而成。
而构成DNA
的碱基共有4种,分别为腺瞟呤(A)、鸟嘌呤(G)、胸腺嘧啶(T)和胞嘧啶(C)。
我们知道,在两条互补碱基链的对应位置上,腺瞟呤总是和胸腺嘧啶配对,鸟嘌呤总
是和胞嘧啶配对。
你的任务就是根据一条单链上的碱基序列,给出对应的互补链上的
碱基序列。
输入
一个字符串,表示一条碱基链。
这个字符串只含有大写字母A、T、G、C,分别表示
腺瞟呤、胸腺嘧啶、鸟嘌呤和胞嘧啶。
字符串长度不超过255。
输出
一个只含有大写字母A、T、G、C的字符串,为与输入的碱基链互补的碱基链。
08:密码翻译
∙
∙提交
∙统计
∙提问
总时间限制:
1000ms
内存限制:
65536kB
描述
在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密,
简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易的识
别。
我们给出一种最简的的加密方法,对给定的一个字符串,把其中从a-y,A-Y
的字母用其后继字母替代,把z和Z用a和A替代,其他非字母字符不变,则可
得到一个简单的加密字符串。
输入
输入一行,包含一个字符串,长度小于80个字符。
输出
输出每行字符串的加密字符串。
来源
计算概论05
09:潜伏者
描述
R国和S国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动。
历经艰险后,潜伏于S国的R国间谍小C终于摸清了S国军用密码的编码规则:
1、 S国军方内部欲发送的原信息经过加密后在网络上发送,原信息的内容与加密
后所的内容均由大写字母…A‟—…Z‟构成(无空格等其他字母)。
2、 S国对于每个字母规定了对应的“密字”。
加密的过程就是将原信息中的所有字
母替换为其对应的“密字”。
3、每个字母只对应一个唯一的“密字”,不同的字母对应不同的“密字”。
“密字”可
以和原字母相同。
例如,若规定…A‟的密字为…A‟,…B‟的密字为…C‟(其他字母及密字略),则原信息“ABA”
被加密为“ACA”。
现在,小C通过内线掌握了S国网络上发送的一条加密信息及其对应的原信息。
小C
希望能通过这条信息,破译S国的军用密码。
小C的破译过程是这样的:扫描原信
息,对于原信息中的字母x(代表任一大写字母),找到其在加密信息中的对应大写
字母y,并认为在密码里y是x的密字。
如此进行下去直到停止于如下的某个状态:
1、所有信息扫描完毕,…A‟—…Z‟所有26个字母在原信息中均出现过并获得了相应
的“密字”。
2、所有信息扫描完毕,但发现存在某个(或某些)字母在原信息中没有出现。
3、扫描中发现掌握的信息里有明显的自相矛盾或错误(违反S过密码的编码规则)。
例如某条信息“XYZ”被翻译为“ABA”就违反了“不同字母对应不同密字”的规则。
在小C忙得头昏脑胀之际,R国司令部又发来电报,要求他翻译另外一条从S国刚刚
截取到的加密信息。
现在请你帮助小C:通过内线掌握的信息,尝试破译密码。
然后
利用破译的密码,翻译电报中的加密信息。
输入
共3行,每行为一个长度在1到100之间的字符串。
第1行为小C掌握的一条加密信息。
第2行为第1行的加密信息所对应的原信息。
第3行为R国司令部要求小C翻译的加密信息。
输入数据保证所有字符串仅由大写字母…A‟—…Z‟构成,且第1行长度与第2行相等。
输出
共1行。
若破译密码停止时出现2,3两种情况,请你输出“Failed”(不含引号,注意首字母
大写,其它小写)。
否则请输出利用密码翻译电报中加密信息后得到的原信息。
提示
输入输出样例1说明:原信息中的字母…A‟和…B‟对应相同的密字,输出“Failed”。
输入输出样例2说明:字母…Z‟在原信息中没有出现,输出“Failed”。
来源
NOIP2009复赛提高组第一题
10:加密的病历单
描述
小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会。
在药房实习期间,小英扎实的专业基础获得了医生的一致好评,得知小英在计
算概论中取得过好成绩后,主任又额外交给她一项任务,解密抗战时期被加密
过的一些伤员的名单。
经过研究,小英发现了如下加密规律(括号中是一个“原文->密文”的例子)
1. 原文中所有的字符都在字母表中被循环左移了三个位置(dec ->abz)
2. 逆序存储(abcd ->dcba)
3. 大小写反转(abXY ->ABxy)
输入
一个加密的字符串。
(长度小于50且只包含大小写字母)
输出
输出解密后的字符串。
来源
医学部计算概论2011年期末考试(王志钢)改编
11:将字符串中的小写字母转换成大写字母
∙统计
∙提问
总时间限制:
1000ms
内存限制:
65536kB
描述
给定一个字符串,将其中所有的小写字母转换成大写字母。
输入
输入一行,包含一个字符串(长度不超过100,可能包含空格)。
输出
输出转换后的字符串。
12:大小写字母互换
∙
∙统计
∙提问
总时间限制:
1000ms
内存限制:
65536kB
描述
把一个字符串中所有出现的大写字母都替换成小写字母,同时把小写字母替换成大写
字母。
输入
输入一行:待互换的字符串。
输出
输出一行:完成互换的字符串(字符串长度小于80)。
来源
计算概论05
13:整理药名
描述
医生在书写药品名的时候经常不注意大小写,格式比较混乱。
现要求你写一个程序将
医生书写混乱的药品名整理成统一规范的格式,即药品名的第一个字符如果是字母要
大写,其他字母小写。
如将ASPIRIN、aspirin整理成Aspirin。
输入
第一行一个数字n,表示有n个药品名要整理,n不超过100。
接下来n行,每行一个单词,长度不超过20,表示医生手书的药品名。
药品名由字
母、数字和-组成。
输出
n行,每行一个单词,对应输入的药品名的规范写法。
来源
习题(7-8) 医学部2010 期末试题臧家瑞
14:忽略大小写的字符串比较
描述
一般我们用strcmp可比较两个字符串的大小,比较方法为对两个字符串从前
往后逐个字符相比较(按ASCII码值大小比较),直到出现不同的字符或遇
到'\0'为止。
如果全部字符都相同,则认为相同;如果出现不相同的字符,则
以第一个不相同的字符的比较结果为准(注意:如果某个字符串遇到'\0'而另
一个字符串还未遇到'\0',则前者小于后者)。
但在有些时候,我们比较字符
串的大小时,希望忽略字母的大小,例如"Hello"和"hello"在忽略字母大小写时
是相等的。
请写一个程序,实现对两个字符串进行忽略字母大小写的大小比较。
输入
输入为两行,每行一个字符串,共两个字符串。
(每个字符串长度都小于80)
输出
如果第一个字符串比第二个字符串小,输出一个字符"<";
如果第一个字符串比第二个字符串大,输出一个字符">";
如果两个字符串相等,输出一个字符"="。
来源
15:验证子串
∙提交
∙统计
∙提问
总时间限制:
1000ms
内存限制:
65536kB
描述
输入两个字符串,验证其中一个串是否为另一个串的子串。
输入
输入两个字符串,每个字符串占一行,长度不超过200且不含空格。
输出
若第一个串s1是第二个串s2的子串,则输出(s1) is substring of (s2)
否则,若第二个串s2是第一个串s1的子串,输出(s2) is substring of (s1)
否则,输出No substring。
来源
JerryCircle[Java 语言程序设计]
16:删除单词后缀
∙提交
∙统计
∙提问
总时间限制:
1000ms
内存限制:
65536kB
描述
给定一个单词,如果该单词以er、ly或者ing后缀结尾,则删除该后缀(题目
保证删除后缀后的单词长度不为0),否则不进行任何操作。
输入
输入一行,包含一个单词(单词中间没有空格,每个单词最大长度为32)。
输出
输出按照题目要求处理后的单词。
来源
北京大学医学部计算概论08期末考试题
17:单词替换
描述
输入一个字符串,以回车结束(字符串长度<=100)。
该字符串由若干个单词组成,
单词之间用一个空格隔开,所有单词区分大小写。
现需要将其中的某个单词替换成另
一个单词,并输出替换之后的字符串。
输入
输入包括3行,
第1行是包含多个单词的字符串s;
第2行是待替换的单词a(长度<= 100);
第3行是a将被替换的单词b(长度<= 100).
s, a, b 最前面和最后面都没有空格.
输出
输出只有 1 行,将s中所有单词a替换成b之后的字符串。
来源
医学部计算概论2006期末考试题
18:紧急措施
∙
∙提交
∙统计
∙提问
总时间限制:
1000ms
内存限制:
65536kB
描述
近日,一些热门网站遭受黑客入侵,这些网站的账号、密码及email的数据惨
遭泄露。
你在这些网站上注册若干账号(使用的用户名不一定相同),但是注
册时使用了相同的email。
你此时拿到了那份泄露的数据,希望尽快将自己的
密码更改。
策略如下:根据email找到你的用户名和密码,然后更改密码。
更
改的规则为:小写和大写交换,非字母字符保持不变。
输入
第一行为你的email地址,长度不超过50个字符且只包含字母、数字和…@‟符号。
第二行为账号数N,N(0 < N < 10000)。
接下来N行,每行表示一个账号,格式为:
用户名密码email
它们之间用单个空格分开。
用户名、密码、email均不含空格,且长度不超过50个
字符。
输出
有若干行,每行为你的一个账号,包括:你的账号,修改后的密码(之间用单个空格
分隔)。
如果没有你的账号,则输出empty。
来源
医学部计算概论2011年期末考试(谢佳亮)19:过滤多余的空格
∙提交
∙统计
∙提问
总时间限制:
1000ms
内存限制:
65536kB
描述
一个句子中也许有多个连续空格,过滤掉多余的空格,只留下一个空格。
输入
一行,一个字符串(长度不超过200),句子的头和尾都没有空格。
输出
过滤之后的句子。
20:单词的长度
∙提交
∙统计
∙提问
总时间限制:
1000ms
内存限制:
65536kB
描述
输入一行单词序列,相邻单词之间由1个或多个空格间隔,请对应地计算各个单词的
长度。
注意,如果有标点符号(如连字符,逗号),标点符号算作与之相连的词的一部分。
没有被空格间开的符号串,都算作单词。
输入
一行单词序列,最少1个单词,最多300个单词,单词之间用至少1个空格间隔。
单词序列总长度不超过1000。
输出
依次输出对应单词的长度,之间以逗号间隔。
来源
习题(7-7) 元培-From WHF
21:最长最短单词
描述
输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母、空
格和逗号。
单词由至少一个连续的字母构成,空格和逗号都是单词间的间隔。
试输出第1个最长的单词和第1个最短单词。
输入
一行句子。
输出
两行输出:
第1行,第一个最长的单词。
第2行,第一个最短的单词。
提示
如果所有单词长度相同,那么第一个单词既是最长单词也是最短单词。
来源
习题(12-2)
22:字符串最大跨距
∙提交
∙统计
∙提问
总时间限制:
1000ms
内存限制:
65536kB
描述
有三个字符串S,S1,S2,其中,S长度不超过300,S1和S2的长度不超过10。
想
检测S1和S2是否同时在S中出现,且S1位于S2的左边,并在S中互不交叉(即,
S1的右边界点在S2的左边界点的左侧)。
计算满足上述条件的最大跨距(即,最
大间隔距离:最右边的S2的起始点与最左边的S1的终止点之间的字符数目)。
如
果没有满足条件的S1,S2存在,则输出-1。
例如,S = "abcd123ab888efghij45ef67kl", S1="ab", S2="ef",其中,S1在
S中出现了2次,S2也在S中出现了2次,最大跨距为:18。
输入
三个串:S1, S2, S3,其间以逗号间隔(注意,S1, S2, S3中均不含逗号和空格);
输出
S1和S2在S最大跨距;若在S中没有满足条件的S1和S2,则输出-1。
23:单词翻转
∙提交
∙统计
∙提问
总时间限制:
1000ms
内存限制:
65536kB
描述
输入一个句子(一行),将句子中的每一个单词翻转后输出。
输入
只有一行,为一个字符串,不超过500个字符。
单词之间以空格隔开。
输出
翻转每一个单词后的字符串,单词之间的空格需与原文一致。
24:单词倒排
∙提交
∙统计
∙提问
总时间限制:
1000ms
内存限制:
65536kB
描述
编写程序,读入一行英文(只包含字母和空格,单词间以单个空格分隔),将所有单词
的顺序倒排并输出,依然以单个空格分隔。
输入
输入为一个字符串(字符串长度至多为100)。
输出
输出为按要求排续后的字符串。
25:ISBN号码
描述
每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位
识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键
盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。
ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的
三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表
该书在出版社的编号;最后一位为识别码。
识别码的计算方法如下:
首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的
余数即为识别码,如果余数为10,则识别码为大写字母X。
例如ISBN号码
0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左
至右,分别乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然后取158
mod 11的结果4作为识别码。
你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出
“Right”;如果错误,则输出你认为是正确的ISBN号码。
输入
只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的
格式要求)。
输出
共一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定
的格式,输出正确的ISBN号码(包括分隔符“-”)。
26:字符串p型编码
∙统计
∙提问
总时间限制:
1000ms
内存限制:
65536kB
描述
给定一个完全由数字字符('0','1','2',…,'9')构成的字符串str,请写出str的p型
编码串。
例如:字符串122344111可被描述为"1个1、2个2、1个3、2个4、
3个1",因此我们说122344111的p型编码串为1122132431;类似的道理,编
码串101可以用来描述1111111111;00000000000可描述为"11个0",因此
它的p型编码串即为110;100200300可描述为"1个1、2个0、1个2、2个0、
1个3、2个0",因此它的p型编码串为112012201320。
输入
输入仅一行,包含字符串str。
每一行字符串最多包含1000个数字字符。
输出
输出该字符串对应的p型编码串。
27:行程长度编码
∙
∙提交
∙提问
总时间限制:
1000ms
内存限制:
65536kB
描述
在数据压缩中,一个常用的途径是行程长度压缩。
对于一个待压缩的字符串而言,我
们可以依次记录每个字符及重复的次数。
这种压缩,对于相邻数据重复较多的情况比
较有效。
例如,如果待压缩串为"AAABBBBCBB",则压缩的结果是
(A,3)(B,4)(C,1)(B,2)。
当然,如果相邻字符重复情况较少,则压缩效率就较低。
现要求根据输入的字符串,得到大小写不敏感压缩后的结果(即所有小写字母均视为
相应的大写字母)。
输入
一个字符串,长度大于0,且不超过1000,全部由大写或小写字母组成。
输出
输出为一行,表示压缩结果,形式为:
(A,3)(B,4)(C,1)(B,2)
即每对括号内部分别为字符(都为大写)及重复出现的次数,不含任何空格。
28:判断字符串是否为回文
∙
∙提交
∙提问
总时间限制:
1000ms
内存限制:
65536kB
描述
输入一个字符串,输出该字符串是否回文。
回文是指顺读和倒读都一样的字符
串。
输入
输入为一行字符串(字符串中没有空白字符,字符串长度不超过100)。
输出
如果字符串是回文,输出yes;否则,输出no。
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。
输出
只有一行,为展开后的字符串。
来源
NOIP2007复赛提高组第二题。