CSP-J 初赛模拟卷(第 10 套)
参考答案与解析
--- #### **一、单项选择题** **答案速查** | 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | 答案 | B | A | B | D | A | B | D | A | | 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | 答案 | A | A | A | B | B | C | C | **逐题解析** ##### 第1题 **答案:** B **解析:** 全国青少年计算机程序设计竞赛(NOI)由中国计算机学会于 1984 年创办。 ##### 第2题 **答案:** A **解析:** 计算机使用二进制的 `0` 和 `1` 表示、存储及处理数据,字符、图像等信息也需先编码为二进制。 ##### 第3题 **答案:** B **解析:** 图灵奖是计算机科学领域的重要奖项;其余奖项分别主要面向电影、自然科学及文学等领域、新闻等领域。 ##### 第4题 **答案:** D **解析:** 前三项均等于十进制 $617$:$(269)_{16}=617$,$(1151)_8=617$。而 $(1001101011)_2=512+64+32+8+2+1=619$,因此 D 不同。 ##### 第5题 **答案:** A **解析:** 链表元素的存储位置不必连续,访问第 $i$ 个元素通常需要沿指针依次查找,因此不支持像数组那样按下标直接随机访问任一元素。 ##### 第6题 **答案:** B **解析:** 故事内容不断包含与自身结构相同的子故事,对应函数在执行过程中调用自身的递归思想。 ##### 第7题 **答案:** D **解析:** 有 $n$ 个顶点的树恰有 $n-1$ 条边。原图有 $m$ 条边,保留一棵生成树后需删除 $m-(n-1)=m-n+1$ 条边。 ##### 第8题 **答案:** A **解析:** 将双胞胎视为一个整体,与其余 $3$ 人共形成 $4$ 个排列单位,有 $4!$ 种;双胞胎内部还有 $2!$ 种顺序,共 $4!\times2!=48$ 种。 ##### 第9题 **答案:** A **解析:** 高度为 $5$ 时,前 $4$ 层必须填满,最后一层可从左到右放置 $1$ 至 $16$ 个结点。结点数确定后形态唯一,因此有 $16$ 种形态。 ##### 第10题 **答案:** A **解析:** 先从 $5$ 种颜色中选出形成完整手套的 $2$ 种,再从剩余 $3$ 种中选出 $2$ 种,各取一只。单只手套分别有左右手两种选择,因此共有 $\binom52\binom32\times2^2=120$ 种。 ##### 第11题 **答案:** A **解析:** 若四种花色各至多取 $3$ 张,则总数至多为 $12$ 张。现取 $13$ 张,根据抽屉原理,至少有一种花色取到 $4$ 张。 ##### 第12题 **答案:** B **解析:** 递归先求前 $n-1$ 个元素的最小值,再与第 $n$ 个元素比较并返回较小者,因此最终返回整个数组的最小值。 ##### 第13题 **答案:** B **解析:** 后序遍历末尾的 `A` 为根;用中序遍历划分左右子树,再递归确定各子树根结点,可得前序遍历为 `ABDEGHJCFI`。 ##### 第14题 **答案:** C **解析:** 首尾两位及第二、四位分别可取 `00`、`11`、`88`、`69`、`96`,各有 $5$ 种选择;中间一位只能取 `0`、`1`、`8`。共有 $5\times5\times3=75$ 种。 ##### 第15题 **答案:** C **解析:** 根下标为 $1$,图中连续三次取右孩子得到下标 $1\to3\to7\to15$,所以最大下标至少为 $15$。 #### **二、阅读程序** ##### 程序(1) **程序分析:** `encoder` 先放入 `C、S、P`,再按字母序补齐其余字母;`decoder` 是其逆映射。程序把输入字母按这张逆映射表逐个替换。 **答案速查** | 题号 | 16 | 17 | 18 | 19 | 20 | 21 | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | 答案 | √ | × | √ | × | A | D | ###### 第16题 **答案:** √(正确) **解析:** 下标为 `st[i]-'A'`,只有大写字母才能保证下标位于 $0$ 至 $25$ 之间。 ###### 第17题 **答案:** ×(错误) **解析:** 并非每个字母都会变化,例如字母 `Z` 的映射仍为 `Z`,输入 `Z` 就与输出相同。 ###### 第18题 **答案:** √(正确) **解析:** 需要检查是否预先出现的特殊字母 `C、S、P` 都在前三个位置;后续补入的字母小于当前枚举字母,不会造成遗漏,因此修改该检查上界不影响结果。 ###### 第19题 **答案:** ×(错误) **解析:** 只建立前 $16$ 个位置的逆映射会漏掉后续字母,部分输入无法被正确还原,输出可能改变。 ###### 第20题 **答案:** A **解析:** 要输出 `A、B、C`,输入应分别是 `encoder[0..2]`,即 `C、S、P`,因此输入既有 `S` 又有 `P`。 ###### 第21题 **答案:** D **解析:** 输出 `C、S、P` 分别对应输入 `P、R、N`,所以输入既没有 `S`,也没有 `A`。 ##### 程序(2) **程序分析:** 利用恒等式 $u+v-(u\mathbin{\&}v)=u\mathbin{|}v$,程序在所有数值不相同的元素对中寻找最大的按位或值;若不存在这样的元素对,保留初值 $-1$。 **答案速查** | 题号 | 22 | 23 | 24 | 25 | 26 | 27 | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | 答案 | × | × | √ | √ | C | C | ###### 第22题 **答案:** ×(错误) **解析:** 数组合法下标为 $0$ 至 $999$,因此输入 $n=1000$ 时仍不会越界;不是必须严格小于 $1000$。 ###### 第23题 **答案:** ×(错误) **解析:** 若所有输入值都相同,条件始终不成立,`ans` 保持为 $-1$,所以输出不一定非负。 ###### 第24题 **答案:** √(正确) **解析:** 例如序列 `2,1`,原循环会处理“较小值在后、较大值在前”的有序对;限制 `j=i+1` 会漏掉该比较,输出可能改变。 ###### 第25题 **答案:** √(正确) **解析:** 按位或具有交换性。把严格小于改为不等于只会同时处理反向的一对,不会改变最大值。 ###### 第26题 **答案:** C **解析:** 若出现 $128$,只要与某个不同值配对,其按位或的结果就至少为 $128$;若全部为 $128$ 则输出为 $-1$。两种情况都不可能得到 $127$。 ###### 第27题 **答案:** C **解析:** 按位或结果为偶数,说明参与得到该结果的两个数最低位均为零,因此输入中至少有两个偶数。 ##### 程序(3) **程序分析:** 程序模拟长除法,`b` 保存商的各位,`a` 保存待除数(余数乘十)。若待除数重复,就找到了循环节;若余数变为零,则小数终止。 **答案速查** | 题号 | 28 | 29 | 30 | 31 | 32 | 33 | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | 答案 | × | √ | √ | × | C | D | ###### 第28题 **答案:** ×(错误) **解析:** 当 `n==m` 且 `m!=0` 时,整数部分为 $1$、余数为零,可以正常结束,不要求两个输入不同。 ###### 第29题 **答案:** √(正确) **解析:** 程序包含整数除法和取模,除数 `m` 必须非零。 ###### 第30题 **答案:** √(正确) **解析:** 循环可因检测到重复待除数而执行 `break`,也可因余数为零而使 `do...while` 条件不成立,共有两种退出途径。 ###### 第31题 **答案:** ×(错误) **解析:** 例如输入 `1 3` 时,会出现待除数 $10$,已经大于初始的 $n=1$,因此该限制不成立。 ###### 第32题 **答案:** C **解析:** $11/8=1.375$,是有限小数,不需循环节括号,因此输出 `1.375`。 ###### 第33题 **答案:** D **解析:** 输入为 `5 13`,$5/13=0.\overline{384615}$,输出为 `0.(384615)`,对应 D。 #### **三、完善程序** ##### 程序(1) **程序分析:** 程序排序后,用资金最多的候选同学与价格最低的自行车配对,累计各人的不足金额,判断公共预算能否补足;再二分求最多可租车的人数。函数参数 `nn` 为本次待检验人数。 **答案速查** | 题号 | 答案 | | :---: | :--- | | 34 | `n-nn+1` | | 35 | `M[i] < C[j]` | | 36 | `count <= A` | | 37 | `check(mid)` | | 38 | `mid-1` | ###### 第34题 **答案:** `n-nn+1` **解析:** 应选取排序后资金最多的 `nn` 人,其第一人的下标是 `n-nn+1`。 ###### 第35题 **答案:** `M[i] < C[j]` **解析:** 只有自行车价格高于该同学已有资金时才需公共预算补足,即判断 `M[i]=0 && y>=0 && x=0 && y>=0 && x