全球旧事资料 分类
NOIP2008普及组解题报告
Bysx349一、ISBN号码
(isb
.pas/c/cpp)【问题描述】每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、位识别1码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。识别码的计算方法如下:首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,…,9,再求和,即0×1+6×2+……+2×9158,然后取158mod11的结果4作为识别码。你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出你认为是正确的ISBN号码。【输入】输入文件isb
.i
只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。【输出】输出文件isb
.out共一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”)。【输入输出样例1】isb
.i
0-670-82162-4【输入输出样例2】isb
.i
0-670-82162-0isb
.out0-670-82162-4isb
.outRight
【算法分析】这道题考查的主要为字符串运算方面的知识。根据题目判断,读入的字符串st1中有用的位数为10位,所以我们可以只考虑这10位数字。在读入后,可以通过copy函数将原来字符串中的四段合并成一个新的字符串st2:以样例2为例,合并后的字符串为0670821620。然后逐位累加,判断最后一位是否满足要求。如果满足,则输出Right,否则,将st1最后一位更改为正确的数字,仍以样例2为例,改为0-670-82162-4,然后输出st1即可。该题最大的失分点在于这句话:“如果余数为10,则识别码为大写字母X”这意味着在判断和修正时如果出现余数为10的状况则要考虑到X即代表10。如果注意到这点细节,那么这道题应该没有什么太大问题。
f二、排座椅
(seat.pas/c/cpp)【问题描述】上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。不过r
好听全球资料 返回顶部