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

10 KiB
Raw Blame History

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]<C[j]。

第36题

答案: count <= A

解析: 累计不足金额 count 不超过学校预算 A 时,本次人数可行,因此返回 count<=A。

第37题

答案: check(mid)

解析: 将二分得到的候选人数 mid 交给判定函数,调用 check(mid)。

第38题

答案: mid-1

解析: 候选人数不可行时,应把右边界缩小到 mid-1,排除当前值及更大值。

程序(2)

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

答案速查

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

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

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

第40题

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

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

第41题

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

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

第42题

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

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

第43题

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

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