2024年9月电子学会青少年软件编程(C/C++三级)等级考试试卷
操作/编程
三级
2024
2024-11-23 09:19:26
72次
一、编程题
有多少坑
大雨过后,一些高低不平的地方就会形成积水,俗称为“坑”。这里我们将问题简化为只考虑一段路面的横截面。我们将这一段截面上的土地分割成单位宽度的窄条,测量出每个窄条的高度。假设有无穷多的水量从天而降,请你计算一下,这段路面上会形成多少个水坑?坑的最大深度是多少毫米?
时间限制:7000
内存限制:262144
输入
输入第一行给出一个正整数 N(≤ 100000)。随后一行给出 N 个非负整数,为路面横截面总左到右的单位宽度窄条的高度,以毫米为单位,不超过 1000。
输出
输出分两行,第一行输出水坑的个数,第二行输出所有水坑中最大的深度,以毫米为单位。 注意:即使两个相邻的水坑有相同高度的水平面,只要之间有窄条相隔,就算是两个水坑。
样例输入
12
1 4 2 10 7 1 2 1 8 3 1 2
样例输出
3
7
提示
样例说明: 下图给出了样例中得到的水坑示意图。

【知识点】 电子学会C/C++三级
爆气球
爆气球对孩子们来说是很好玩的游戏。假设有 n 只气球被布置在一条直线上,游戏的目标很简单,就是爆掉尽可能多的气球。但是这里我们加一条特殊的规则 —— 你只能跳一次。我们假设聪明的娃穿了件浑身带刺的衣服,跳到某个位置,躺平,这样气球只要碰到娃身体的任何部分都会立刻爆炸。那么你的任务就是告诉娃应该跳到哪里,才能一次爆掉最多的气球。
时间限制:4000
内存限制:262144
输入
输入第一行两个正整数:n(≤ 105)为一条线上布置的气球的数量;h(≤ 103)为孩子伸直双臂能达到的高度。第二行给出 n 个整数,每个对应一只气球在直线轴上的坐标。题目保证坐标按递增顺序给出,所有坐标值在 [-106, 106] 区间内。
输出
在一行中输出孩子跳跃的位置坐标,使得孩子跳到这个位置然后躺平能够爆掉身下最多的气球;随后输出能爆掉的气球的最大数量。如果这个坐标不唯一,输出最小的那个值。 一行中的数间应有 1 个空格。
样例输入
11 120 -120 -40 0 80 122 140 160 220 240 260 300
样例输出
120 5
提示
注意:跳到从 120 到140,或 240 到 260 之间的任何位置,都可以爆掉 5 只气球,所以 120 作为最小的坐标被输出。
【知识点】 电子学会C/C++三级
乘法小宇宙
一个 n 位数的正整数 A=anan-1…a1 和另一个 2 位数的正整数 B=b2b1 相乘,其乘法展开式如下图所示:

其中 C=cn+1cn…c1 是 A 与 b1 相乘的结果,D=dn+1dn…d1 是 A 与 b2 相乘的结果,P=pn+2pn+1…p1 是 A 与 B 相乘的结果。
若上图中的每一位数字都在一个给定的非零个位数字集合 S 里,则称 A 和 B 属于同一个乘法小宇宙 S。
本题给定乘法小宇宙 S 和 A 的位数,请你找出同属于这个乘法小宇宙中的所有 A 和 B。
时间限制:6000
内存限制:65536
输入
输入在一行中给出两个正整数 n(< 8)和 K(≤ 5),分别是 A 的位数和乘法小宇宙 S 中元素的个数。第二行给出 K 个 (0, 10) 区间内的整数,为 S 中的元素。题目保证没有重复元素。数字间以空格分隔。
输出
按照 A 的非递减序输出所有同属于这个乘法小宇宙中的 A 和 B,每行输出一对,数字间以 1 个空格分隔,行首尾不得有多余空格。对同一个 A,按 B 的递增序输出。若没有解,则输出 `No Solution`。
样例输入
样例#1:
4 5
4 2 1 6 5
样例#2:
3 4
9 2 5 6
样例输出
样例#1:
5556 44
6111 24
6111 42
样例#2:
No Solution
【知识点】 电子学会C/C++三级
买地攻略
数码城市有土地出售。待售的土地被划分成若干块,每一块标有一个价格。这里假设每块土地只有两块相邻的土地,除了开头和结尾的两块是只有一块邻居的。每位客户可以购买多块连续相邻的土地。
现给定这一系列土地的标价,请你编写程序,根据客户手头的现金量,告诉客户有多少种不同的购买方案。
时间限制:8000
内存限制:262144
输入
输入首先在第一行给出两个正整数:N(≤ 104)为土地分割的块数(于是这些块从 1 到 N 顺次编号);M(≤ 109)为客户手中的现金量。 随后一行给出 N 个正整数,其中第 i 个数字就是第 i 块土地的标价。 题目保证所有土地的总价不超过 109。
输出
在一行中输出客户有多少种不同的购买方案。请注意客户只能购买连续相邻的土地。
样例输入
5 85 38 42 15 24 9
样例输出
11
提示
样例解释: 这 11 种不同的方案为: 38 42 15 24 9 38 42 42 15 42 15 24 15 24 15 24 9 24 9
【知识点】 电子学会C/C++三级
势均力敌
用 n (> 2) 个不同的个位数字组成一个 n 位数,显然有 n! 个不同的结果。可以证明,这 n! 个数字可以被分为势均力敌的两组 —— 即平方和相等、且个数也相等的两组。
本题就请你用程序验证一下这个结论。
因为本题是一道简单题,所以规模很小,只考虑 n ≤ 4 的情况。
时间限制:4000
内存限制:262144
输入
输入第一行给出正整数 n(2 < n ≤ 4),随后一行给出 n 个不同的、在区间 [1, 9] 内的个位数字,其间以空格分隔。
输出
将所有组成的 n! 个不同的 n 位数分为平方和相等、且个数也相等的两组。但你只需要输出其中一组就可以了。每个数字占一行,共输出 n!/2 行。 注意:解可能不唯一,输出任何一组解就可以。
样例输入
3 5 2 1
样例输出
125 512 251
【知识点】 电子学会C/C++三级
