- 将18套模拟卷分离为试题和答案解析,补齐并规范逐题解析 - 补充SVG图示,统一试题排版并导出打印PDF - 重整初赛专题训练与复习资料目录,清理旧版源文件
10 KiB
一、单项选择题
答案速查
| 题号 | 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]。