Files
cpp-courseware/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/答案解析/CSP-J初赛模拟卷·第15套-答案解析.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 初赛模拟卷(第 15 套)
参考答案与解析

一、单项选择题

答案速查

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

逐题解析

第1题

答案: B

解析: 图灵奖是计算机科学领域的重要奖项;其余奖项分别主要面向电影、自然科学及文学等领域、新闻等领域。

第2题

答案: A

解析: 早期电子计算机首先用于科学与工程中的数值计算,例如数值表和复杂算式的计算。

第3题

答案: A

解析: 各层最多分别有 1,2,4,\ldots,2^{n-1} 个结点,求和得到 $2^n-1$。

第4题

答案: A

解析: 删除边 a 后,剩余有向路径仍使任意两个顶点互相可达,图仍满足强连通定义,因此选 A。

第5题

答案: B

解析: a 初始为 $1$,每轮减 $2$。执行两轮后 s=2、a=-3;要使循环此时结束,应输入 n=-3。

第6题

答案: B

解析: 元素 7 与后面的 2,3,5,4 形成 4 个逆序对,元素 5 与 4 再形成 1 个,合计 5 个。

第7题

答案: A

解析: 字符串是由字符组成的特殊线性表,可以用数组存储;长度可以为零。含空格字符的串仍含有元素,不是空串。

第8题

答案: B

解析: $10000=2^4\times5^4$。在 1 至 10000 中,去掉能被 2 或 5 整除的数,并加回被重复扣除的 10 的倍数,得到 10000-5000-2000+1000=4000 个。

第9题

答案: D

解析: 前序顺序为“根、左、右”,中序顺序为“左、根、右”。要使两者相同,每个结点都不能有左子树;因此只含根结点或仅沿右孩子延伸的二叉树符合条件。

第10题

答案: B

解析: 全集的子集总数为 $S=2^{10}=1024$,含 7 个元素的子集数为 $T=\binom{10}7=120$,因此 $T/S=120/1024=15/128$。

第11题

答案: A

解析: 不能分享给 Jacob 或他的朋友,否则 Jacob 可能通过评论看到照片。Dana、Michael、Eve 均符合条件,对应 A。

第12题

答案: B

解析: x & (x-1) 每次恰好清除二进制表示中最右侧的一个 1。循环次数因此等于 1 的个数,所填语句为 x &= x - 1。

第13题

答案: C

解析: 方案二每公里消耗更多,但每周最多安排 3 次。安排 3 次方案二、2 次方案一,共跑 3\times5+2\times3=21 公里,消耗 3\times600+2\times300=2400 千卡,满足时间与里程限制。

第14题

答案: A

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

第15题

答案: D

解析: Linux 可执行文件没有统一的默认扩展名;能否执行主要由文件格式及执行权限决定,因此前三项均不符合。

二、阅读程序

程序(1)

程序分析: 递归满足 $\operatorname{luo}(n,m)=\sum_{0\le i<m,\ i\text{ 为偶数}}\operatorname{luo}(n-1,i)$,边界为 n<=1 或 m<2。gu 以 -1 表示未计算,实现记忆化搜索。

答案速查

题号 16 17 18 19 20 21
答案 × √ √ √ B A
第16题

答案: ×(错误)

解析: 初次输入的 m 可以是奇数;递归产生的后续参数才由偶数循环变量 i 给出。

第17题

答案: √(正确)

解析: 当 m 为偶数时,改为 <= 会多计算 i=m 这一项。例如 luo(2,2) 会由 1 变为 $2$。

第18题

答案: √(正确)

解析: 删除的是记忆化的读取和写入,递归式与边界不变,因此结果相同,但运行时间可能显著增加。

第19题

答案: √(正确)

解析: 在题目的补码整数模型中,将每个字节置为 255 会使每个 int 的所有位均为 $1$,其值为 $-1$,与逐项赋值效果一致。

第20题

答案: B

解析: 输入为 4 8。由递推式可得 luo(4,8)=luo(3,0)+luo(3,2)+luo(3,4)+luo(3,6)=1+1+2+4=8。

第21题

答案: A

解析: 记忆化后至多有 O(nm) 个状态,每个状态枚举 O(m) 个转移,时间复杂度为 $O(nm^2)$。

程序(2)

程序分析: 程序将 Base64 字符映射为 6 位整数,再将每四个编码字符组合为至多三个原始字节。ans 是全局字符数组,输出时按以零结尾的 C 字符串处理。题目规定 char 为有符号的 8 位类型。

答案速查

题号 22 23 24 25 26 27
答案 × √ √ B B C
第22题

答案: ×(错误)

解析: 限定的字符集合是 Base64 编码的输入字符集;解码结果可以包含空格等其他字符,因此该断言错误。

第23题

答案: √(正确)

解析: 例如 YQ== 解码为 a,YQA= 解码为 a 后跟零字节。用 %s 输出时都会在零字节处结束,第二行同为 a。

第24题

答案: √(正确)

解析: table[0] 被初始化为全一位模式 0xff,在题目规定的有符号 8 位 char 中表示 $-1$,转为 int 后仍为 $-1$。

第25题

答案: B

解析: 循环每次处理 4 个输入字符,每轮只进行常数次运算,总时间复杂度为 $O(n)$。

第26题

答案: B

解析: 将 Y3Nx 按 Base64 解码,依次得到字符 c、s、q,所以输出 csq。

第27题

答案: C

解析: 该字符串解码为 ccf 2021,其中 ccf 与年份之间有一个空格,不能省略。

三、完善程序

程序(1)

程序分析: 程序从指定格子出发,按马的八种走法回溯。移动前同时检查是否在棋盘内、是否访问过;tot 记录已移动的步数,访问满整个棋盘时增加方案数。

答案速查

题号 28 29 30 31 32
答案 C B D A D
第28题

答案: C(x>=0 && y>=0 && x<r && y<c)

解析: 合法下标应同时满足 x>=0 && y>=0 && x<r && y<c,四个条件缺一不可。

第29题

答案: B(check(x+wayr[i], y+wayc[i]))

解析: 应检查移动后的目标位置,因此调用 check(x+wayr[i],y+wayc[i])。

第30题

答案: D(!mark[x+wayr[i]][y+wayc[i]])

解析: 目标格不能已被访问,故还需判断 !mark[x+wayr[i]][y+wayc[i]]。

第31题

答案: A(tot==r * c-1)

解析: 起点已占一个格子,走满 r\times c 个格子需再移动 r*c-1 步,因此条件为 tot==r*c-1。

第32题

答案: D(x+wayr[i], y+wayc[i])

解析: 下一层递归的坐标应是当前坐标加上本次移动向量,即 x+wayr[i],y+wayc[i]。

程序(2)

程序分析: 程序枚举大矩阵中所有可容纳小矩阵的左上角,逐元素比较是否完全相同,输出全部匹配位置;haveAns 记录是否存在至少一个匹配。

答案速查

题号 答案
33 cin >> b[i][j]
34 m1-m2+1
35 good = true
36 m2
37 haveAns = true
第33题

答案: cin >> b[i][j]

解析: 读入第二个矩阵时,应把数据存入 b[i][j]。

第34题

答案: m1-m2+1

解析: 小矩阵宽为 m2,放置的最后一列起点为 m1-m2+1。

第35题

答案: good = true

解析: 开始检查新的位置时,先假定匹配,令 good=true,发现不等元素后再改为假。

第36题

答案: m2

解析: 内层比较应遍历小矩阵全部 m2 列,因此上界为 m2。

第37题

答案: haveAns = true

解析: 发现一个匹配后,需令 haveAns=true,以避免最后误输出不存在答案。

程序(3)

程序分析: 程序扫描原字符串,把所有非数字字符依次复制到前面,用 j 记录保留字符数,最后只输出这 j 个字符,从而删除全部数字。

答案速查

题号 答案
38 ||
39 j++
40 j
41 s[i]
第38题

答案: ||

解析: 不属于数字的条件是小于字符 0 或大于字符 9,应使用逻辑或运算符 ||。

第39题

答案: j++

解析: 写入一个保留字符后,下一个写入位置需向后移动,执行 j++。

第40题

答案: j

解析: j 就是删除数字后保留下来的字符数,应作为函数返回值。

第41题

答案: s[i]

解析: 保留字符已经依次存入 s[0..len-1],输出时逐个访问 s[i]。