当前位置:文档之家› 2017年海淀区信息学竞赛小学组试卷

2017年海淀区信息学竞赛小学组试卷

2017年海淀区中小学生信息学奥林匹克竞赛小学组竞赛试题(每题100分,共700分)答题注意事项:(1)请使用QBASIC(BC7.0版本)或C/C++(DEVC++5.11版本)语言编程环境;(2)以各自题目要求的名称(如:isbn.bas/或isbn.c/或isbn.cpp)命名保存源文件;(3)输入输出均采用文件读写,将写好的源文件保存入D:\TEST文件夹中按要求提交。

如:D:\TESTisbn.cppnumber.cppid.cppstick.cpp………1、ISBN码(100分)(源文件名称:isbn.cpp/isbn.c/isbn.bas)【题目描述】每一本正式出版的图书都有一个ISBN码与之对应,ISBN码包括9位数字、1位识别码和3个分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”就是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。

ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔符后的五位数字代表该书在该出版社的编号;最后一位为识别码。

识别码的计算方法如下:首位数字乘以1,加上次位数字乘以2,……,以此类推,第九位数字乘以9,最后用所得的结果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.in仅一行,一个字符串,表示一本书的ISBN码(输入保证符合ISBN码的格式要求)。

【输出文件】文件名为:isbn.out共一行,假如输入的ISBN码的识别码正确,就输出“Right”,否则,按照规定的格式,输出正确的ISBN码(包括分隔符“-”)。

【样例输入】0-670-82162-0【样例输出】0-670-82162-42、第N个智慧数(100分)(源文件名称:number.cpp/ number.c/ number.bas)【题目描述】一个正整数如果能表示成了两个正整数的平方差,则称这个数为“智慧数”,比如16就等于5的平方减去3的平方,所以16就是一个智慧数,从1开始的自然数列中,将“智慧数”从小到大编号为1,2,3,……,n。

现输入一个正整数n,输出第n个“智慧数”。

【输入文件】文件名为:number.in 文件中仅包含一个正整数n。

【输出文件】文件名为:number.out 文件中仅包含一个正整数,表示编号为n的智慧数。

【样例输入】3【样例输出】16【数据范围】1 <= n <= 100。

3、第m大的身份证号码(100分)(源文件名称:id.cpp/id.c/id.bas)【题目描述】身份证号是我国公民的唯一识别码,它由18位数字或字母组成(只可能最后一位是字母)。

18位身份证号码各位的含义如下:第1-2位为省、自治区、直辖市代码;第3-4位为地级市、盟、自治州代码;第5-6位为县、县级市、区代码。

第7-14位为出生年月日,比如19970401代表1997年4月1日;第15-16位为顺序号,第17位代表性别,男为单数,女为双数;第18位为校验码,0-9和X。

作为尾号的校验码,是把前十七位数字代入统一的公式计算出来的,解答本题你不用关心是如何计算出来的。

现在给你n个身份证号码,请你按照出生年月日的字典序(年龄从大到小)输出第m个人的身份证号。

【输入文件】文件名为:id.in文件中第一行包含两个正整数n和m,两数间用一个空格分隔,接下来的n行每行为一个形如上述格式的身份证号码(不需要关心校验码的正确性,不影响本题解答)。

【输出文件】文件名为:id.out 文件中仅包含一行,为题目要求的一个身份证号码。

【样例输入】4 2110108************130211************420333************210222************【样例输出】130211************【数据范围】1 <= n <= 100,1 <= m <= n。

4、锯木棍(100分)(源文件名称:stick.cpp/stick.c/stick.bas)【题目描述】有一根粗细均匀长度为L的木棍,先用红颜色刻度线将它m等分,再用蓝色刻度线将其n等分(m>n),然后按所有刻度线将该木棍锯成小段,计算并输出长度最长的木棍的长度和根数。

【输入文件】文件名为:stick.in文件中仅有一行,包含三个正整数L,m和n,两两之间用一个空格分隔。

【输出文件】文件名为:stick.out文件包含两个正整数a和k,分别表示最长木棍的长度和根数。

(为了简化题目的难度,所有的测试数据中m和n一定是L的约数)。

两数间用一个空格分隔。

【样例输入】12 6 4【样例输出】2 4【数据范围】1 <= L <= 100000。

5、坐标统计(100分)(源文件名称:count.cpp/ count.c/ count.bas)【题目描述】输入n个点在平面上的坐标(横纵坐标都是整数),对于每个点可以控制所有位于它左下方的点(即横坐标x和纵坐标y都比它小),它可以控制的点的数目称为“战斗力”。

依次输出每个点的战斗力,最后输出战斗力最高的点的编号(如果若干个点的战斗力并列最高,输出其中最大的编号)。

【输入文件】文件名为:count.in第一行包含一个正整数n,接下来的n行,每行描述一个点的坐标,第i+1行包含两个正整数x和y,表示编号为i的点的横坐标为x,纵坐标为y。

【输出文件】文件名为:count.out共有n+1行第1行到第n行,每行包含一个整数,第i行的整数表示编号为i的点的战斗力,第n+1行表示战斗力最高的点的编号。

【样例输入】64 26 64 815 611 98 14【样例输出】011336【数据范围】1<=n<=100,1<=x<=1000,1<=y<=1000。

6、打印月历(100分)(源文件名称:calen.cpp/ calen.c/ calen.bas)【题目描述】给你一个年份y和一个月份m,请你按照样例的格式打印出y年第m月的月历。

例如当y=2015,m=1时,2015年1月的月历打印效果就应该如下:S M T W T F S1 2 34 5 6 7 8 9 1011 12 13 14 15 16 1718 19 20 21 22 23 2425 26 27 28 29 30 31样例的格式中,第一行为代表星期的字母,第一个字母S代表星期日,第二个字母M 代表星期一,以此类推,第七个字母S代表星期六,第一个字母的左边没有空格,两个字母之间有三个空格分隔。

接下来的几行是第m月的日期,每一列的数都与本列的第一个字母左对齐,同一行的两个日期之间要有若干个空格分隔。

为了简化题目的难度,输入还会给出一个正整数n(n小于8),表示第y年的1月1日是星期n。

例如2015 1 4的含义是要输出2015年1月的月历,2015年1月1日是星期四。

【输入文件】文件名为:calen.in文件中仅有一行,包含三个正整数y,m和n,两数间用一个空格分隔。

【输出文件】文件名为:calen.out文件包含符合题目要求的若干行。

【样例输入】2015 1 4【样例输出】S M T W T F S1 2 34 5 6 7 8 9 1011 12 13 14 15 16 1718 19 20 21 22 23 2425 26 27 28 29 30 31【数据范围】1900 < y < 2100,0 < m < 13,0 < n < 8。

【提示】本题对结果的输出格式有严格要求,题目描述的功能可以使用TAB键,在C/C++中可以使用“\t”来实现。

7、分割绳子(100分)(源文件名称:cable.cpp/ cable.c/ cable.bas)【题目描述】现有N条绳子,它们的长度分别为L1,L2,……,Ln,如果从它们中切割出K条长度相同的绳子,这K条绳子每条最长能有多长?【输入文件】文件名为:cable.in共有两行,第一行包含两个正整数N和K,用一个空格分隔;第二行包含N个数,依次表示N条绳子的长度,两数间用一个空格分隔。

每条绳子长度的小数不超过两位。

【输出文件】文件名为:cable.out仅包含一个数,表示所得K绳子的最大长度。

答案四舍五入保留小数点后两位。

【样例输入】4 118.02 7.43 4.57 5.39【样例输出】2.00【数据范围】1 <= N <= 1000,1 <= K <= 1000,1 <= Li <= 10000。

相关主题