- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
聪明人的游戏教材
PAGE
PAGE 195
第二章 字符串处理和进制转换
在程序设计时,如果输入数据一行包含多种信息,以字符串的形式出现,这时就需要用到字符串处理的知识来进行操作。在计算机领域中,有时需要将十进制数转换成二进制、八进制和十六进制的数,有时又需要逆向转换,即将二进制、八进制和十六进制的数转换成十进制的数,或它们相互间进行转换。因此,本章主要介绍字符串处理和进制转换的相关知识。
第1课 贝贝的交通指挥系统(jqr.pas)
【问题描述】
贝贝所居住的城市有很多个交通路口,其中有26个交通路口在上下班高峰期总是塞车,严重影响市民的出行。于是交通管理部门研制了一批机器人交通警察,用它们来专门指挥这26个交通路口,但需要一个自动化的指挥系统来指挥机器人的运作。这个任务交给了贝贝,贝贝的设计如下。
分别用大写英文字母A???B、…、Z表示这26个路口,并按如下的规则派出这些机器人到交通路口协助指挥交通:
1.每次派出两名机器人;
2.当两名机器人的名字中存在一个相同的字母时,这两名机器人便到对应的交通路口上指挥交通;有多个字母相同时,两名机器人需要按字母的字典顺序到这些路口上巡逻;
3.当两名机器人的名字中不存在相同的字母时,交警部门的派出指令无效( WuXiao)。
假设这些机器人的名字全由大写字母组成,请你编一个程序,帮贝贝完成这个交通指挥系统。
【输入格式】jqr.in
第1行输入第一个机器人的名字(长度不超过250);
第2行输入第二个机器人的名字(长度不超过250)。
【输出格式】jqr.out
1.当不能派出机器人时,在第一行输出“WuXiao”;
2.当两名机器人在路口上指挥交通时,在第一行输出“ZhiHui”,第二行输出路口编号;
3.当两名机器人在路口上巡逻时,在第一行输出“XLuo,第二行输出巡逻的路口数,第三行输出巡逻线路。
【输入输出样例】
输入输出样例1OPEN
CLOSEXLuo
2
E-O样例2EPSON
SENPUMXLuo
4
E-N-P-S
分析问题
题目意思:输入两个机器人的名字,统计他们的名字中出现相同字母的个数,由相同字母的个数决定他们巡逻的路线。当两名机器人的名字中存在一个相同的字母时,这两名机器人便到对应的交通路口上指挥交通;有多个相同的字母时,两名机器人需要按字母的字典顺序到这些路口上巡逻;当两名机器人的名字中不存在相同的字母时,交警部门的派出指令无效。
解决问题
1.方法一
因为输入的机器人名长度不超过250,可用字符串方式读入数据。用两个字符串保存数据,使用双重循环,用枚举法查找相同的字母,用一个数组保存这些相同的字母,并用一个变量total记录相同字母的个数,然后按字母顺序排序,最后根据相同字母的个数分下面三种情况输出结果:
如果total=0,则输出“WuXiao;
如果total=1,则输出“ZhiHui;
如果total1,则输出“XLuo。
最后按题目要求输出巡逻路线。
var str1,str2:string;total,i,j,temp:longint;
a:array[0..1000] of integer;
begin
readln(str1);readln(str2);//读入两个机器人的名字
total:=0;//记录相同字母个数,清零
for i:=1 to length(str1) do //①
for j:=1 to length(str2) do
if str1[i]=str2[j] then begin inc(total);a[total]:=str1[i];end;
if total=0 then writeln(WuXiao);
if total=1 then begin writeln(ZhiHui);writeln(a[total]);end;
for i:=1 to total-1 do
for j:=i+1 to total do
if a[i]a[j] then begin temp:=a[i];a[i]:=a[j];a[j]:=temp;end;
if total1 then begin
write(a[1]);
for i:=2 to total do write(-,a[i])
文档评论(0)