- 将18套模拟卷分离为试题和答案解析,补齐并规范逐题解析 - 补充SVG图示,统一试题排版并导出打印PDF - 重整初赛专题训练与复习资料目录,清理旧版源文件
9.6 KiB
一、单项选择题
答案速查
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| 答案 | C | C | B | C | A | D | C | C |
| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|
| 答案 | C | C | D | B | C | D | A |
逐题解析
第1题
答案: C
解析: ATM 密码验证依据用户掌握的密码信息,不利用人体的生理或行为特征,因此不属于生物特征识别。
第2题
答案: C
解析: 每 4 位二进制数对应 1 位十六进制数,因此 100 位二进制正整数需 \lceil100/4\rceil=25 位十六进制数表示。
第3题
答案: B
解析: C++ 支持类、对象、继承及多态等机制,是支持面向对象程序设计的高级语言。
第4题
答案: C
解析: Wi-Fi 主要用于无线局域网,使终端在较小范围内通过无线方式接入网络。
第5题
答案: A
解析: 选项 A 可化为 $P\lor[\neg P\land(Q\lor\neg Q)]=P\lor\neg P$,其值恒为真。
第6题
答案: D
解析: 降低浮点数精度时,舍入可能使数值变大、变小或保持不变,但不会把正数变为负数,或把负数变为正数。
第7题
答案: C
解析: 前缀表达式对应 $3+2\times(5+12)$,结果为 $3+34=37$。
第8题
答案: C
解析: 图灵奖是计算机科学领域的最高荣誉之一,本题对应选项 C。
第9题
答案: C
解析: 三人的选择相互独立,方案总数为 $\binom42\binom43\binom43=6\times4\times4=96$。
第10题
答案: C
解析: 若先序遍历为 ACB,则根为 A。由中序遍历 BAC 可知 B 在左子树、C 在右子树,先序遍历必须先访问 B 再访问 C,与 ACB 矛盾。
第11题
答案: D
解析: 选项 D 对关键字 2,6,10,17 分别得到地址 $1,2,3,4$,互不相同,因此不会产生冲突。
第12题
答案: B
解析: 先令 s->next=hs,将新结点接到原栈顶之前;再令 hs=s,使栈顶指针指向新结点。
第13题
答案: C
解析: 逆序排列的 5 个数共有 \binom52=10 个逆序对。冒泡排序每次相邻交换恰好减少一个逆序对,因此需要 10 次交换。
第14题
答案: D
解析: 最坏情况下,两数组的元素交错出现。在已经确定前 2n-1 个元素后,剩余最后一个元素可直接放入结果,因此最坏比较次数为 $2n-1$。
第15题
答案: A
解析: A_1 的未访问邻接点为 $A_3$,深度优先搜索不能在访问 A_1 后跳过 A_3 而先访问 $A_2$,因此 A 不可能。
二、阅读程序
程序(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)
程序分析: 程序模拟长除法,b 保存商的各位,a 保存待除数(余数乘十)。若待除数重复,就找到了循环节;若余数变为零,则小数终止。
答案速查
| 题号 | 22 | 23 | 24 | 25 | 26 | 27 |
|---|---|---|---|---|---|---|
| 答案 | × | √ | √ | × | C | D |
第22题
答案: ×(错误)
解析: 当 n==m 且 m!=0 时,整数部分为 $1$、余数为零,可以正常结束,不要求两个输入不同。
第23题
答案: √(正确)
解析: 程序包含整数除法和取模,除数 m 必须非零。
第24题
答案: √(正确)
解析: 循环可因检测到重复待除数而执行 break,也可因余数为零而使 do...while 条件不成立,共有两种退出途径。
第25题
答案: ×(错误)
解析: 例如输入 1 3 时,会出现待除数 $10$,已经大于初始的 $n=1$,因此该限制不成立。
第26题
答案: C
解析: $11/8=1.375$,是有限小数,不需循环节括号,因此输出 1.375。
第27题
答案: D
解析: 输入为 5 13,$5/13=0.\overline{384615}$,输出为 0.(384615),对应 D。
程序(3)
程序分析: 程序随机选择枢轴,划分比枢轴小与不小的元素,并只递归进入包含第 k 小值的部分,是快速选择算法。输入顺序不影响随机枢轴下的平均线性复杂度,但最坏情况仍可退化。
答案速查
| 题号 | 28 | 29 | 30 | 31 | 32 | 33 |
|---|---|---|---|---|---|---|
| 答案 | × | √ | B | B | A | D |
第28题
答案: ×(错误)
解析: rand()%(R-L+1)+L 的取值范围为闭区间 $[L,R]$,包括左端点 L。
第29题
答案: √(正确)
解析: 两个指针相遇后有 a==b,相应位置的 d[a] 与 d[b] 相同,替换不会改变该判断。
第30题
答案: B
解析: 随机枢轴使平均递归规模按比例缩小,单次划分为线性时间,平均总时间为 $O(n)$。
第31题
答案: B
解析: 随机选择枢轴后,初始数组严格递减也不会使平均复杂度改变,仍为 $O(n)$。
第32题
答案: A
解析: 平均复杂度为 $O(n)$;最坏情况下每次仅排除一个元素,总代价为 $n+(n-1)+\cdots+1=O(n^2)$。
第33题
答案: D
解析: 全部元素相等时,划分不能有效均分。求第 n 小值会逐次缩短一个元素,时间复杂度退化为 $O(n^2)$。
三、完善程序
程序(1)
程序分析: 目标是把前 p 个元素整体移到末尾,保持两部分各自顺序。第一种方法借助辅助数组直接映射位置;第二种方法反复把后半部分当前元素插到前面。
答案速查
| 题号 | 答案 |
|---|---|
| 34 | n-p+i |
| 35 | a[i] |
| 36 | n |
| 37 | i-p+1 |
| 38 | a[i-p] |
第34题
答案: n-p+i
解析: 前 p 个元素应放到辅助数组的最后 p 个位置,第 i 项的新位置为 n-p+i。
第35题
答案: a[i]
解析: 后半段第 i 项应复制原数组当前元素 a[i],并放入 b[i-p]。
第36题
答案: n
解析: 辅助数组填完后,应把全部 n 项复制回原数组,因此循环上界为 n。
第37题
答案: i-p+1
解析: 第 i 项要插入位置 i-p,需把 i-p 至 i-1 的元素右移一位,故倒序移动循环的下界为 i-p+1。
第38题
答案: a[i-p]
解析: 腾出的插入位置是 i-p,应把暂存值写入 a[i-p]。
程序(2)
程序分析: 程序离线按身高排序并建立双向链表,再按进入教室的逆序删除同学。处理第 i 人时,链表中保留的恰是此前进入者,最近身高只可能来自其有序前驱或后继。
答案速查
| 题号 | 答案 |
|---|---|
| 39 | i <= j |
| 40 | next_pos[order[i]] = order[i+1] |
| 41 | higher = height[next_pos[i]] - height[i] |
| 42 | shorter < higher |
| 43 | previous[next_pos[i]] = previous[i] |
第39题
答案: i <= j
解析: 快速排序的两个扫描指针尚未交错时才能交换,条件为 i<=j。
第40题
答案: next_pos[order[i]] = order[i+1]
解析: 按身高顺序建立右邻链接,当前结点 order[i] 的后继应为 order[i+1]。
第41题
答案: higher = height[next_pos[i]] - height[i]
解析: 若存在更高的后继,与其身高差为 height[next_pos[i]]-height[i],应赋给 higher。
第42题
答案: shorter < higher
解析: 只有更矮者严格更近时才选前驱。相等时题目要求选择更高者,因此条件应为 shorter<higher。
第43题
答案: previous[next_pos[i]] = previous[i]
解析: 删除当前结点后,其后继的前驱需接到当前前驱,执行 previous[next_pos[i]]=previous[i]。