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