整理 NOI 初赛资料目录并标准化 CSP-J 模拟卷
- 将18套模拟卷分离为试题和答案解析,补齐并规范逐题解析 - 补充SVG图示,统一试题排版并导出打印PDF - 重整初赛专题训练与复习资料目录,清理旧版源文件
This commit is contained in:
1 parent
fe5c7ffd58
commit
0af92a68d9
216 files changed
+12743
-1272
No files matched your search
@@ -0,0 +1,334 @@
|
||||
<center><font size="6"><b>CSP-J 初赛模拟卷(第 10 套)</b></font></center>
|
||||
<center><font size="4"><b>参考答案与解析</b></font></center>
|
||||
|
||||
---
|
||||
|
||||
#### **一、单项选择题**
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 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]`。
|
||||
Reference in new issue
Block a user