Files
cpp-courseware/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/答案解析/CSP-J初赛模拟卷·第09套-答案解析.md
T
xiaolinquan 0af92a68d9 整理 NOI 初赛资料目录并标准化 CSP-J 模拟卷
- 将18套模拟卷分离为试题和答案解析,补齐并规范逐题解析
- 补充SVG图示,统一试题排版并导出打印PDF
- 重整初赛专题训练与复习资料目录,清理旧版源文件
2026-11-06 17:50:51 +08:00

9.4 KiB
Raw Blame History

CSP-J 初赛模拟卷(第 09 套)
参考答案与解析

一、单项选择题

答案速查

题号 1 2 3 4 5 6 7 8
答案 D A B C D A A A
题号 9 10 11 12 13 14 15
答案 B C B C B B C

逐题解析

第1题

答案: D

解析: C 语言属于过程式程序设计语言;其余选项中的 C++、Python 和 Java 均支持面向对象程序设计。

第2题

答案: A

解析: 存储单元的唯一标识称为地址,CPU 根据地址读写相应的存储单元。

第3题

答案: B

解析: 广域网的英文为 Wide Area Network,缩写为 WAN;LAN 和 MAN 分别表示局域网和城域网。

第4题

答案: C

解析: 共有 2048\times1024 个像素,每个像素占 32/8=4 字节。总空间为 2048\times1024\times4=8\times1024^2 字节,即 $8\ \mathrm{MB}$。

第5题

答案: D

解析: 若先输出 c、d,则 a、b 仍在栈中,且 b 位于 a 上方。在输出 a 之前必须先输出 b,因此 c,d,a,e,b 不合法。

第6题

答案: A

解析: 折半查找每次将候选范围约减半,最坏比较次数为 $\lfloor\log_2 100\rfloor+1=7$。

第7题

答案: A

解析: 含 n 个顶点的连通无向图至少有 n-1 条边;取一棵生成树即可达到这个最小值。因此 10 个顶点可用 9 条边构成连通图。

第8题

答案: A

解析: 先给每个班分配一个名额,再将剩余 3 个相同名额分给 7 个不同班级。由隔板法,方案数为 $\binom{3+7-1}{7-1}=\binom96=84$。

第9题

答案: B

解析: 高度为 h 的完全二叉树满足 $2^{h-1}\le n\le2^h-1$。因为 $32\le61\le63$,所以高度为 $6$。

第10题

答案: C

解析: 球和袋子都不可区分,等价于将 8 分拆为至多 5 个正整数。按非空袋子数 1,2,3,4,5 分类,分别有 1,4,5,5,3 种,共 18 种。

第11题

答案: B

解析: 哈夫曼算法每次选择当前权值最小的两个结点合并,以局部最优选择构造整体最优编码树,属于贪心策略。

第12题

答案: C

解析: 递归展开为 $7\times\operatorname{solve}(5)=7\times5\times\operatorname{solve}(3)=7\times5\times3\times2=210$。

第13题

答案: B

解析: 从 a 出发的深度优先搜索,最后访问的顶点可以是 b 或 e,其余两点均不能成为最后访问的顶点,因此共有 2 个。

第14题

答案: B

解析: 安排用时为 $1$、2 的两人先过河,用时 1 的人返回;再让用时 $4$、8 的两人过河,用时 2 的人返回;最后前两人一起过河。总时间为 $2+1+8+2+2=15$。

第15题

答案: C

解析: 由辗转相除法,$377=319+58$,$319=5\times58+29$,$58=2\times29$,所以最大公约数为 $29$。

二、阅读程序

程序(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)

程序分析: 对每个位置 i,程序输出从该位置向右、连续元素均不大于 a[i] 的最远端点 ans。若当前值比前一个值小,则重新从 i 开始寻找。

答案速查

题号 22 23 24 25 26 27
答案 × √ √ √ D A
第22题

答案: ×(错误)

解析: ans 至少等于 i,但可能恰好等于 i;例如严格递增序列中每次输出就是当前位置,因此不保证严格大于。

第23题

答案: √(正确)

解析: 只有在 ans<n 时才执行递增操作,故 ans 不会超过 $n$。

第24题

答案: √(正确)

解析: 下降时两种条件都会重置;上升时重置为 i 也不会丢失合法的更远端点;相等时两种条件都不重置,因此结果不变。

第25题

答案: √(正确)

解析: ans 是连续满足约束的最远端点。既然已越过 i+1,该位置的值必然不大于 a[i]。

第26题

答案: D

解析: 严格递增时,每轮只需常数次判断,ans 随位置推进,整体时间复杂度为 $O(n)$。

第27题

答案: A

解析: 严格递减时,每个位置都会重置并向右扫描至末尾,总次数为 $n+(n-1)+\cdots+1$,最坏复杂度为 $O(n^2)$。

程序(3)

程序分析: 程序通过线性筛求约数函数。f[x] 是正约数个数,g[x] 是正约数之和,c、d 辅助维护最小质因子的幂次及其余部分。

答案速查

题号 28 29 30 31 32 33
答案 √ × × A C C
第28题

答案: √(正确)

解析: f[1]=g[1]=1 只为输入 1 的结果提供初值;大于 1 的项由质数分支或递推独立得到,因此其他输入不受影响。

第29题

答案: ×(错误)

解析: c[i*k] 等于 i 中相应质因子指数加一,恰是约数个数乘积公式中的一个因子,因此该除法能够整除。

第30题

答案: ×(错误)

解析: 约数和也不单调,例如 g[6]=12,而 g[7]=8,由 6 到 7 反而减小。

第31题

答案: A

解析: 每个合数只由其最小质因子筛到一次,所有筛选与转移的总时间为 $O(n)$。

第32题

答案: C

解析: 正约数恰有两个的数正是质数,1 至 100 中共有 25 个质数。

第33题

答案: C

解析: $1000=2^3\times5^3$,约数个数为 $(3+1)^2=16$,约数和为 $(1+2+4+8)(1+5+25+125)=2340$。

三、完善程序

程序(1)

程序分析: 程序用二进制快速幂计算 $x^p\bmod m$。指数为奇数时把当前底数乘入结果,然后指数折半、底数平方,每次乘法后取模。

答案速查

题号 答案
34 1
35 p > 0
36 result * x % m
37 x * x % m
38 result
第34题

答案: 1

解析: 乘法的单位元为 $1$,因此结果累加器初始化为 1。

第35题

答案: p > 0

解析: 指数尚未全部处理时继续循环,条件为 p>0。

第36题

答案: result * x % m

解析: 当当前二进制位为 1 时,应执行 result=result*x%m。

第37题

答案: x * x % m

解析: 指数每次除以二,底数需相应平方并取模,即 x*x%m。

第38题

答案: result

解析: 最终所求余数保存在 result 中,直接输出即可。

程序(2)

程序分析: 程序模拟编号为 0 至 n-1 的约瑟夫环,每隔一名存活者淘汰一人。F 标记淘汰状态,c 记录已淘汰人数,p 在存活者之间交替计数。

答案速查

题号 39 40 41 42 43
答案 D C C D B
第39题

答案: D(c < n - 1)

解析: 保留一人时结束,因此循环条件为 c<n-1,对应选项 D。

第40题

答案: C(p)

解析: p 为真时淘汰当前存活者,为假时跳过,所填条件为 p。

第41题

答案: C(c++)

解析: 每淘汰一人,已淘汰人数加一,应执行 c++。

第42题

答案: D(p ^= 1)

解析: 每访问一名存活者后切换淘汰与跳过状态,执行 p^=1。

第43题

答案: B(i = (i+1) % n)

解析: 沿环前进并在到达 n 时回到 $0$,执行 i=(i+1)%n,对应选项 B。