聪明人的游戏教材.doc

聪明人的游戏教材.doc

ID:55612773

大小:2.18 MB

页数:193页

时间:2020-05-19

聪明人的游戏教材.doc_第1页
聪明人的游戏教材.doc_第2页
聪明人的游戏教材.doc_第3页
聪明人的游戏教材.doc_第4页
聪明人的游戏教材.doc_第5页
资源描述:

《聪明人的游戏教材.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、第二章字符串处理和进制转换在程序设计时,如果输入数据一行包含多种信息,以字符串的形式出现,这时就需要用到字符串处理的知识来进行操作。在计算机领域中,有时需要将十进制数转换成二进制、八进制和十六进制的数,有时又需要逆向转换,即将二进制、八进制和十六进制的数转换成十进制的数,或它们相互间进行转换。因此,本章主要介绍字符串处理和进制转换的相关知识。第1课贝贝的交通指挥系统(jqr.pas)【问题描述】贝贝所居住的城市有很多个交通路口,其中有26个交通路口在上下班高峰期总是塞车,严重影响市民的出行。于是交通管理部门研制了一批机器人交通警察,用它们来专门指挥这26个交通路口,但需要一个自动化的指挥系

2、统来指挥机器人的运作。这个任务交给了贝贝,贝贝的设计如下。分别用大写英文字母A、B、…、Z表示这26个路口,并按如下的规则派出这些机器人到交通路口协助指挥交通:1.每次派出两名机器人;2.当两名机器人的名字中存在一个相同的字母时,这两名机器人便到对应的交通路口上指挥交通;有多个字母相同时,两名机器人需要按字母的字典顺序到这些路口上巡逻;3.当两名机器人的名字中不存在相同的字母时,交警部门的派出指令无效(WuXiao)。假设这些机器人的名字全由大写字母组成,请你编一个程序,帮贝贝完成这个交通指挥系统。【输入格式】jqr.in第1行输入第一个机器人的名字(长度不超过250);第2行输入第二个机

3、器人的名字(长度不超过250)。【输出格式】jqr.out1.当不能派出机器人时,在第一行输出“WuXiao”;2.当两名机器人在路口上指挥交通时,在第一行输出“ZhiHui”,第二行输出路口编号;3.当两名机器人在路口上巡逻时,在第一行输出“XLuo",第二行输出巡逻的路口数,第三行输出巡逻线路。【输入输出样例】输入输出样例1OPENCLOSEXLuo2E-O样例2EPSONSENPUMXLuo4E-N-P-S分析问题题目意思:输入两个机器人的名字,统计他们的名字中出现相同字母的个数,由相同字母的个数决定他们巡逻的路线。当两名机器人的名字中存在一个相同的字母时,这两名机器人便到对应的交通

4、路口上指挥交通;有多个相同的字母时,两名机器人需要按字母的字典顺序到这些路口上巡逻;当两名机器人的名字中不存在相同的字母时,交警部门的派出指令无效。解决问题1.方法一因为输入的机器人名长度不超过250,可用字符串方式读入数据。用两个字符串保存数据,使用双重循环,用枚举法查找相同的字母,用一个数组保存这些相同的字母,并用一个变量total记录相同字母的个数,然后按字母顺序排序,最后根据相同字母的个数分下面三种情况输出结果:如果total=0,则输出“WuXiao";如果total=1,则输出“ZhiHui";如果total>1,则输出“XLuo"。最后按题目要求输出巡逻路线。varstr1,

5、str2:string;total,i,j,temp:longint;a:array[0..1000]ofinteger;beginreadln(str1);readln(str2);//读入两个机器人的名字total:=0;//记录相同字母个数,清零fori:=1tolength(str1)do//①forj:=1tolength(str2)doifstr1[i]=str2[j]thenbegininc(total);a[total]:=str1[i];end;iftotal=0thenwriteln('WuXiao');iftotal=1thenbeginwriteln('ZhiHui

6、');writeln(a[total]);end;fori:=1tototal-1doforj:=i+1tototaldoifa[i]>a[j]thenbegintemp:=a[i];a[i]:=a[j];a[j]:=temp;end;iftotal>1thenbeginwrite(a[1]);fori:=2tototaldowrite('-',a[i])end;end.参考程序如下:上述程序未考虑题目中隐含的条件,即机器人名字中可能会出现重复的相同字母。上面①处双重循环的代码,由于忽略题目隐含信息,把重复字母也重复计算在total上,最终total的结果是错误的,导致输出路线的错误。应怎

7、么解决呢?我们可以设置一个数组标识出现过的相同字母,实现如下:fori:='A'to'Z'dob[i]:=true;fori:=1tolength(str1)doforj:=1tolength(str2)doif(str1[il=str2[j])andb[str1[i]]thenbegininc(total);a[total]:=strl[i];b[str1[i]]:=false;end;算法效率:程序中统计相同字母个数

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。