试卷 2020 北京青少年信息学科普日小学组(市赛)真题
2020 北京青少年信息学科普日小学组(市赛)真题
编程题
第 1 题    问答题

拼图(graph.cpp)

【问题描述】 

小明想用自己的打印机打印一幅宽为 W,高为 H 的画。

然而他的打印机不够大,只能打出边长为 a 的正方形图片,他打算将画分割成很多个部分,每个部分都是长方形,且长方形的边与原来的画的边平行,长方形的每边长度都不超过 a。

为了减小麻烦,小明希望最终分出的长方形数量最少。 请问他最少要分出多少个长方形?

 例如,当小明的画宽为 25,高为 15 时,若打印机可以打印的正方形的边长为 10,则至少要分出 6 个长方形。

 【输入格式】

从文件 graph.in 中输入数据。

输入一行包含三个整数 W, H, a,意义如上所述。

【输出格式】

输出到文件 graph.out 中。

输出一行包含一个整数,表示答案。

【样例输入】

25 15 10

【样例输出】

6

【评测用例规模与约定】

注意:以下规模是评测时输入数据一定会满足的限制,在你的程序中不需要对这些限制进行检查。 对于所有评测用例,1 ≤ W ≤ 10000,1 ≤ H ≤ 10000,1 ≤ a ≤ 10000。

第 2 题    问答题

门牌制作(plate.cpp)

【问题描述】

小明要给一层楼的房间安装门牌号码。一个门牌由三位数字组成,第一位为楼层号,后面两位为房间号,当楼层中有 n 个房间时,房间号由 1 至 n 连续编号。

例如:当 4 层有 5 个房间时,门牌号码分别编为 401、402、403、404、405。要制作一个门牌号,必须制作对应的数字符号,并粘贴在牌子上。

 例如要制作 401 这个门牌号,需要数字符号 4、0、1 各一个;而门牌号 404 需要数字符号 4 两个,数字符号 0 一个。

 给定楼层的编号,和这层楼的房间总数,请计算需要数字符号 0、1、2、3、4、5、6、7、8、9 各多少个。

【输入格式】

从文件 plate.in 中输入数据。 输入的第一行包含一个整数 f,表示楼层号。第二行包含一个整数 n,表示房间数量。

 

【输出格式】

输出到文件 plate.out 中。

输出一行,包含十个整数,依次表示需要数字符号 0、1、2、3、4、5、6、7、8、9 的个数。相邻的数之间使用一个空格分隔。


【样例输入】

4 5

【样例输出】

5 1 1 1 6 1 0 0 0 0

【评测用例规模与约定】

注意:以下规模是评测时输入数据一定会满足的限制,在你的程序中不需要对这些限制进行检查。对于所有评测用例,1 ≤ f ≤ 9,1 ≤ n ≤ 99。

第 3 题    问答题

向左转(left.cpp) 

【问题描述】

老师正在操场上给同学们训练队列。 

小明在队列中。

开始的时候,小明面向正北站立。

每次老师发出一个指令,小明都跟随指令行动。

 

      

 

老师的指令可能是:向左转、向右转、向后转。每个指令的动作与平时我们体育课上的动作一致,具体的:

向左转:

1. 如果原来小明朝北,向左转后朝西;

2. 如果原来小明朝南,向左转后朝东; 

3. 如果原来小明朝西,向左转后朝南; 

4. 如果原来小明朝东,向左转后朝北。


向右转:

1. 如果原来小明朝北,向右转后朝东;

2. 如果原来小明朝南,向右转后朝西; 

3. 如果原来小明朝西,向右转后朝北;

4. 如果原来小明朝东,向右转后朝南。


向后转:

1. 如果原来小明朝北,向后转后朝南;

2. 如果原来小明朝南,向后转后朝北;

3. 如果原来小明朝西,向后转后朝东;

4. 如果原来小明朝东,向后转后朝西。


给定一连串的动作指令,请问所有指令执行完后,小明的方向朝哪?


【输入格式】

从文件 left.in 中输入数据。

输入第一行包含一个整数 n,表示命令的个数。

接下来 n 行,每行一个命令。

如果命令为 left,表示向左转。如果命令为 right,表示向右转。如果命令为 around,表示向后转。


【输出格式】

输出到文件 left.out 中。

输出一个大写字母,表示最终小明的朝向。如果最终朝北,输出 N。如果最终朝南,输出 S。如果最终朝西,输出 W。如果最终朝东,输出 E。


【样例输入】

4

left

left

right

around

 

【样例输出】

E

【评测用例规模与约定】

注意:以下规模是评测时输入数据一定会满足的限制,在你的程序中不需要对这些限制进行检查。对于所有评测用例,1 ≤ n ≤ 1000。

第 4 题    问答题

龟兔赛跑(race.cpp)

【问题描述】

乌龟和兔子正在赛跑。    

 

兔子尽全力每分钟跑 a 米,乌龟尽全力每分钟跑 b 米。从比赛开始,乌龟一直不停的尽全力跑。而兔子却比较偷懒。

 

每过一分钟,兔子都会看看乌龟,如果乌龟在他后面,他就会说“乌龟跑得真慢呀,我就算睡一觉也比乌龟快”,然后躺在地上休息一分钟;如果乌龟与他的位置相同或者跑在他前面,他就会说“乌龟跑得真慢呀,我一下就追上他了”,然后尽全力跑一分钟。已知整个跑道长 t 米,请问谁先跑到终点?

 

【输入格式】

从文件 race.in 中输入数据。

输入一行包含三个整数 a, b, t。

 

【输出格式】

输出到文件 race.out 中。

 

输出一行包含一个拼音,表示谁先到达终点。如果兔子先到终点,输出 tuzi;如果乌龟先到终点,输出 wugui;如果同时到终点,输出 tongshi。

 

【样例输入】

3 2 6

 

【样例输出】

tongshi

 

【样例说明】

第一分钟兔子跑了 3 米,乌龟跑了 2 米。

第二分钟兔子休息,乌龟跑了 2 米到了 4 米的位置。

第三分钟兔子跑了 3 米,乌龟跑了 2 米,同时达到终点。

 

【样例输入】

5 3 7

 

【样例输出】

wugui

 

【样例输入】

5 3 8

 

【样例输出】

tuzi

 

【评测用例规模与约定】

注意:以下规模是评测时输入数据一定会满足的限制,在你的程序中不需要对这些限制进行检查。对于所有评测用例,1 ≤ b < a ≤ 10000,1 ≤ t ≤ 10000。

第 5 题    问答题

字符串改造(trans.cpp)

【问题描述】

小明有一个字符串,由小写英文字母组成。

小明准备对他的字符串进行改造,改造的方法是删除字符串中间的一部分字符。

小明希望改造完后,新的字符串中的相邻字符都满足左边的字符小于等于右边的字符(a < b < … < z)。  

 

例如,对于字符串 happy,小明可以删除第一个字母,变成 appy,满足要求。或者小明删除第二字母,变成 hppy,也满足要求。小明还有其他方法使得结果满足要求。

再如,对于字符串 autumn,可以删除 3 个字母变成 tmn,或者删除 4 个字母变成 at。

其他满足要求的方案还有很多。

小明想知道,对于一个字符串,至少要删除多少个字母能满足要求。

 

【输入格式】

从文件 trans.in 中输入数据。

输入一行包含一个字符串。

 

【输出格式】

输出到文件 trans.out 中。

 

输出一行,包含一个整数,表示最少要删除的字母个数。

 

【样例输入】

happy

 

【样例输出】

1

 

【样例输入】

autumn

 

【样例输出】

3

 

【评测用例规模与约定】

注意:以下规模是评测时输入数据一定会满足的限制,在你的程序中不需要对这些限制进行检查。

对于 30%的评测用例,字符串的长度不超过 20;

对于 60%的评测用例,字符串的长度不超过 1000;

对于 80%的评测用例,字符串的长度不超过 10000;

对于所有评测用例,字符串的长度不超过 100000。

答题卡
编程题
1 2 3 4 5
题目总数:5
总分数:100
时间:120分钟