CSP-J 初赛模拟卷(第 01 套)
参考答案与解析
---
#### **一、单项选择题**
**答案速查**
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| 答案 | A | A | C | B | B | A | C | D |
| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| 答案 | C | B | A | B | B | D | A |
**逐题解析**
##### 第1题
**答案:** A
**解析:** 中国的国家顶级域名为 `.cn`;`.ch` 是瑞士的国家顶级域名。
##### 第2题
**答案:** A
**解析:** C 语言属于过程式程序设计语言;C++、Java 和 C# 均支持面向对象程序设计。
##### 第3题
**答案:** C
**解析:** 先将第一个数作为当前最大值,再依次与其余 $N-1$ 个数比较。每次比较至多排除一个候选最大值,因此至少需要 $N-1$ 次比较。
##### 第4题
**答案:** B
**解析:** 先计算 `b+c`,其后缀表达式为 `bc+`;再与 `a` 相乘,最后与 `d` 相乘,得到 `abc+*d*`。
##### 第5题
**答案:** B
**解析:** 8 位补码的最高位为符号位。该数表示的十进制值为 $-2^7+2^5+2^3+2^1+2^0=-128+32+8+2+1=-85$。
##### 第6题
**答案:** A
**解析:** FTP 是文件传输协议,用于在网络中的计算机之间传输文件。
##### 第7题
**答案:** C
**解析:** 由辗转相除法,$377=319+58$,$319=5\times58+29$,$58=2\times29$,所以最大公约数为 $29$。
##### 第8题
**答案:** D
**解析:** 有 $n$ 个顶点的树恰有 $n-1$ 条边。原图有 $m$ 条边,保留一棵生成树后需删除 $m-(n-1)=m-n+1$ 条边。
##### 第9题
**答案:** C
**解析:** 若先序遍历为 `ACB`,则根为 `A`。由中序遍历 `BAC` 可知 `B` 在左子树、`C` 在右子树,先序遍历必须先访问 `B` 再访问 `C`,与 `ACB` 矛盾。
##### 第10题
**答案:** B
**解析:** 从 `a` 出发,可能的深度优先遍历包括 `a-b-d-c-e`、`a-c-e-d-b` 和 `a-c-d-b-e`。最后访问的顶点只能是 `b` 或 `e`,共有 $2$ 个。
##### 第11题
**答案:** A
**解析:** 从 $A_0$ 进入 $A_1$ 后,$A_1$ 的未访问邻接点 $A_3$ 必须先被访问,不能直接转到与 $A_1$ 不相邻的 $A_2$,因此选项 A 不可能。
##### 第12题
**答案:** B
**解析:** 依次选出三对人员,再除去三支队伍的排列顺序,得到 $\dfrac{\binom62\binom42\binom22}{3!}=15$ 种。
##### 第13题
**答案:** B
**解析:** 根的高度为 $1$ 时,高度为 $h$ 的完全二叉树满足 $2^{h-1}\le n\le2^h-1$。由于 $32\le61\le63$,所以高度为 $6$。
##### 第14题
**答案:** D
**解析:** 代入 $x=\mathrm{true}$、$y=\mathrm{true}$、$z=\mathrm{false}$,A、B、C 均因与 $z$ 进行逻辑与而为假;D 中 $x\land y$ 为真,因此整个逻辑或表达式为真。
##### 第15题
**答案:** A
**解析:** 先从 $5$ 种颜色中选出形成完整手套的 $2$ 种,再从剩余 $3$ 种中选出 $2$ 种,各取一只。单只手套分别有左右手两种选择,因此共有 $\binom52\binom32\times2^2=120$ 种。
#### **二、阅读程序**
##### 程序(1)
**程序分析:** 程序枚举字符串长度 $n$ 的所有正因数 $i$,检查下标为 `i-1` 的字符,并对满足 `c>='a'` 的字符进行减去大小写编码差的转换。可能被修改的位置数等于 $n$ 的正因数个数。
**答案速查**
| 题号 | 16 | 17 | 18 | 19 | 20 | 21 |
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| 答案 | × | √ | × | √ | B | B |
###### 第16题
**答案:** ×(错误)
**解析:** `scanf("%s",st)` 可以读取不含空白的数字、标点等字符,并不限于大小写字母。
###### 第17题
**答案:** √(正确)
**解析:** 当 `i=0` 时,第一次计算 `n%i` 就会出现除数为零的问题,因此程序不能正常执行。
###### 第18题
**答案:** ×(错误)
**解析:** 将循环上界缩小到 $\sqrt n$ 后,会漏掉大于 $\sqrt n$ 的因数对应的位置,因此输出可能改变。
###### 第19题
**答案:** √(正确)
**解析:** 大写字母的编码均小于小写字母 `a`,不满足修改条件,因此字符串保持不变。
###### 第20题
**答案:** B
**解析:** $18$ 的正因数为 $1,2,3,6,9,18$,共 $6$ 个;让这些位置都为小写字母即可使 $6$ 个字符发生变化。
###### 第21题
**答案:** B
**解析:** $100000=2^5\times5^5$,正因数个数为 $(5+1)(5+1)=36$。其余三个长度的因数个数分别为 $9、1、8$。
##### 程序(2)
**程序分析:** 当 $k>1$ 时,数组 `d` 模拟 $k$ 进制计数,`len` 为有效位数,`ans` 记录进位次数。因此 $\mathrm{ans}=\sum_{t\ge1}\lfloor n/k^t\rfloor$。当 $k=1$ 时应直接分析程序,此时每轮恰有一次进位,最终 `ans=n`。
**答案速查**
| 题号 | 22 | 23 | 24 | 25 | 26 | 27 |
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| 答案 | × | × | √ | D | B | D |
###### 第22题
**答案:** ×(错误)
**解析:** 当 $k=1$ 时,第一轮使 `len` 变为 $2$,随后不再增加,因此 `len` 并不总等于 $n$。
###### 第23题
**答案:** ×(错误)
**解析:** 取 $n=1,k=2$,最终 `len=1`,并不小于 $n$,即可构成反例。
###### 第24题
**答案:** √(正确)
**解析:** `len` 是 $n$ 的 $k$ 进制位数,满足 $k^{\mathrm{len}-1}\le nA[p-1].b`)
**解析:** 已保留区间的右端点严格递增;只有当前右端点大于最后保留区间的右端点时,才有保留价值。
###### 第37题
**答案:** A(`q+1