- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
全面地考虑问题
2005-09-18 在编程序时常常会遇到这样的问题:一道很简单的题目,编出的程序却错了很多测试点。这其中的主要原因是由于考虑问题不全面,只想到了一些普通的情况,而遗漏了很多特殊的地方。本文作者以几个竞赛试题为例,说明了全面考虑问题的重要性。
全面地考虑问题
在编程序时常常会遇到这样的问题:一道很简单的题目,编出的程序却错了很多测试点。这其中的主要原因是由于考虑问题不全面,只想到了一些普通的情况,而遗漏了很多特殊的地方。
下面通过几个例子来进行讨论。
1.项链(IOI93第一题)
由n(n≤100)个珠子组成一个项链,珠子有红、蓝、白三种颜色,各种颜色的珠子的安排顺序由输入文件任意给定。
图1.1可看作由字符b(代表蓝色珠子)和字符r(代表红色珠子)所组成的字符串。假定从项链的某处将其剪断,把它摆成一直线,从一端收集同种颜色珠子(直到遇到另一种颜色的珠子时停止)。然后再从另一端重复上述过程(请注意,这一端珠子的颜色不一定和另一端珠子的颜色相同)。
brbrrrbbbrrrrbrrbbrbbbbrrrrb
图 1.1
请选择项链被剪断的位置,目标是使两端各自颜色相同的珠子数目之和最大。例如,对于上图(只有红蓝两种颜色),最大值M是8,断点位置在珠子9和珠子10之间,或珠子24和珠子25之间。
项链中可以有三种颜色用b(蓝)、r(红)和w(白)表示。白色既可看成是红色,又可看成蓝色。
(1)一个ASCII文件NECKLACE.DAT中的内容:该文件中每一行代表某个项链中各种颜色珠子的配置。把输出内容写入ASCII输出文件NECKLACE.SOL中。
作为举例,输入文件的内容可以是:
brbrrrrbbbbrrrrrbbrbbbbrrrrb
bbwbrrrwbrbrrrrb
(2)对于给定的每个项链的配置,求出收集到的珠子数的最大值M及相应的断点位置(注意可能存在多个位置)。
(3)在输出文件NECKLACE.SOL中写入收集到的珠子数的最大值M及断点位置。
例如:
brbrrrbbbrrrrrbbrbbbbrrrrb
8 between 9 and 10
bbwbrrrwbrbrrrrrb
10 between 16 and 17
作为竞赛的第一题,这道题目显然是比较简单的题目。它只包含两个步骤:剪断项链和收集同颜色的珠子。例如下面的一条项链(a)从N=3处断开变为项链(b)。这个操作只需要将前N个珠子移到后边即可。
brb | rrwb ------ rrwbbrb
(a) (b)
现在只剩下收集同颜色的珠子这一步,根据上面的例子我们很容易写出下面的程序。
用变量c来记录最左边珠子的颜色;
Left:=0;
FOR i:=1 TO 项链长度 DO
IF 左数第i个珠子的颜色与c相同
THEN Inc(Left)
ELSE Break;
这样变量Left中存放的就是从左边收集到的珠子的数目,同理可求得从右边收集到的珠子的数目Right,则所求的值为Lett+Right。这个程序显然能通过上面的例子,由于这是一道简单的题目,谁也不想在它上面多费时间,往往做到此为止。可是如果仔细想想, 再举几个例子,就会发现错误。上面的那条项链断开后左有两个珠子为红色和蓝色,在题目中这两种颜色的珠子都比较普通,只有白色的珠子比较特殊。所以应举一个断开后左右两端有白色珠子的例子。还是上面那条项链入N=6处断开。
brbrrw| b-------bbrbrrw
正确答案应是收集到5个珠子:左边2个,有边3个。而上面的程序得到的结果却是3个:左边2个,右边1个。错误就在于没有考虑到左右两端有白色珠子的情况。一种较容易的解决方案是先将左有两端的白色珠子均取下,记其数目为Other,再用上面的程序来求,结果为Left十Right十Other。我们解决了左右两端出现白色珠子的情况,还有没有别的特殊情况呢?一个真正特殊的项链不应包含所有颜色的珠子,最好只包含一种颜色。 如下面的项链是由l0个红色的珠子组成。
rrrrrrrrrr
用我们的程序得出的结果是20个,显然是不对的。因为题目中要求是收集珠子而不是数珠子,所以最后得到的总数不应超过珠子的总数。这虽然只是一个字眼的问题,却使当年中国队的选手失了不少分。一个简单的改正措施是判断最后的结果是否大于珠子总数,如果是则输出珠子的总数即可。
虽然项链这道题比较简单,却很难简单地得到满分,最容易出的错误就是考虑的不全面。
2.多项式加法
由文件输入两个多项式的各项系数和指数,编程求出它们的和,并以手写的习惯输出此多项式。
要求:
(1)多项式的每一项axb用axb的格式输出。
(2)两个多项式在文件中各占一行,每行有2m个数,依次为第一项的系
您可能关注的文档
最近下载
- 21CS03-3:一体化预制泵站选用与安装(三).docx VIP
- 2025届高考物理考点一轮复习:功能关系 能量守恒定律(解析版).pdf VIP
- 二年级上册语文教案 第七单元.docx VIP
- 快递业务操作规范与流程.pdf VIP
- 用在线乳化技术实现柴油机低温燃烧的研究 the experimental study of online emulsification technology in realizing diesel low- temperature combustion.pdf VIP
- 课桌椅项目实施方案-(范文模板).docx VIP
- 快递服务行业业务查询处理规范.doc VIP
- PDCA循环工作方法培训.pptx VIP
- 快递业务操作规范及投诉处理.doc VIP
- 充电桩采购安装项目售后服务承诺.docx VIP
文档评论(0)