| 题号 | 题型 | 答案 | 考点 | 解题思路 |
|---|---|---|---|---|
| 第 1 题 | 选择题 | B | 函数 | 看到虚函数调用先确认动态绑定机制,看到delete先确认析构顺序。核心是理解虚析构函数对对象销毁的影响。 |
| 第 2 题 | 选择题 | A | 函数 | 继承体系中,派生类构造函数必须显式调用基类构造函数。C++ 语法规定:基类构造调用用"基类名(参数)",而非成员名或 super 关键字。本题 Robot 继承 Machine,M… |
| 第 3 题 | 选择题 | C | 函数 | 构造函数按基类到派生类顺序执行,析构函数按派生类到基类顺序执行。看到题先想:new 时基类构造器先跑,delete 时派生类析构器先跑。 |
| 第 4 题 | 选择题 | B | — | 循环 i=2,4,6 依次入栈入队,栈顶为 6、队头为 2;随后各弹出一个元素,栈顶变为 4、队头变为 4,输出 4 4。 |
| 第 5 题 | 选择题 | C | — | 看到循环队列先想空满判别的经典技巧。队列空时 front==rear,但这样无法区分空和满,所以必须空出一个位置。队列满时 rear 恰好比 front 多走一格,用取模运算把环形… |
| 第 6 题 | 选择题 | B | — | 看到递归函数先找调用顺序。本题是左子树递归→访问根节点→右子树递归,典型的中序遍历特征。若改成根节点先访问就是前序,根节点最后访问就是后序。 |
| 第 7 题 | 选择题 | A | — | 先序定根、中序分左右,递归还原树结构后按后序规则输出。 |
| 第 8 题 | 选择题 | D | 函数与递归 | 二叉树高度定义是根到最远叶子的路径节点数。递归时若根为空返回0,否则高度=左右子树高度最大值+1(当前节点本身)。这类题通法是:先写终止条件,再写子问题分解,最后用max取最长路径… |
| 第 9 题 | 选择题 | C | — | 栈是后进先出结构,要访问左子树先,必须让右子树先入栈。代码里先压右再压左,循环里就会先弹出左子树。但节点可能没有左右孩子,直接 s.push(nullptr) 会导致后续访问 no… |
| 第 10 题 | 选择题 | B | 搜索 | BST 查找的核心是"左小右大"性质。看到题先想:当前节点值与目标值比较,小于则去左子树,大于则去右子树。题目已处理 x < root val 的情况,横线处必须处理 x root… |
| 第 11 题 | 选择题 | B | 贪心算法、哈夫曼树 | 哈夫曼树构造遵循贪心策略:每次从当前节点集合中取出权值最小的两个合并为新节点,新节点权值为两者之和,再放回集合。WPL 等于所有内部节点权值之和,也等于各叶子权值×深度之和。本题只… |
| 第 12 题 | 选择题 | C | 格雷码 | 格雷码的反射法生成规则是:先保留原序列,再在末尾追加"1"+原序列的反转。代码中正向循环已处理"0"+原序列,反向循环必须补"1"+原序列的反转。由于反向循环 i 从 oldSiz… |
| 第 13 题 | 选择题 | B | 动态规划、递推 | 看到"走1级或2级"立刻想到斐波那契递推。核心观察:第i级只能从i 1或i 2跳过来,所以dp[i] = dp[i 1] + dp[i 2]。边界是dp[1]=1, dp[2]=2… |
| 第 14 题 | 选择题 | C | 动态规划、递推 | 看到这题先想"最优子结构"和"重叠子问题"——这是动态规划的标志性特征。题目要求选互不相邻元素,意味着选第 i 个时,第 i 1 个必须放弃,因此状态转移只能来自 dp[i 1](… |
| 第 15 题 | 选择题 | A | 动态规划 | 看到 0/1 背包的一维 DP 写法,第一反应是"为什么内层循环要从大到小"。因为一维数组复用,如果从小到大枚举容量,当前物品会被重复使用(相当于完全背包)。从大到小枚举,确保每次… |
| 第 16 题 | 判断题 | B | 函数 | 看到类定义里有自定义构造函数,立刻想到编译器不会再生成默认构造函数。再看 Student s; 无参调用,必然编译失败。 |
| 第 17 题 | 判断题 | B | — | 看到题先定位访问修饰符——value 是 private,再看继承关系——Child 公有继承 Base。核心判断依据是 C++ 访问规则:private 成员仅在当前类内可见,派… |
| 第 18 题 | 判断题 | A | 队列(queue) | 看到队列题先想 FIFO 规则:push 是入队尾,pop 是出队头,front 是看队头。这题三步 push 后队列为 [10, 20, 30],pop 一次删掉队头 10,剩下… |
| 第 19 题 | 判断题 | A | 完全二叉树 | 看到题先想数组下标与节点位置的对应关系。完全二叉树按层序存入数组时,下标 i 的左孩子必在 2i 处,右孩子在 2i+1 处。命题人把这条性质拆成"存在左孩子"的条件句,就是考你是… |
| 第 20 题 | 判断题 | A | 搜索 | 先想二叉搜索树的定义:左子树所有节点值小于根节点,右子树所有节点值大于根节点。再看中序遍历顺序:左→根→右。把这两个规则叠在一起,就能推出遍历结果必然是从小到大。 |
| 第 21 题 | 判断题 | A | 双向BFS、最短路径、二叉树的遍历 | 看到题先想 BFS 的层序遍历特性。队列 FIFO 保证同一层节点先出队,新节点入队时距离已是最小。 |
| 第 22 题 | 判断题 | A | 贪心算法 | 哈夫曼编码的核心是构建一棵二叉树,每次合并两个频率最小的节点,频率高的字符自然落在树的浅层,频率低的字符落在树的深层。编码长度等于节点深度,因此高频字符的编码长度一定不超过低频字符… |
| 第 23 题 | 判断题 | B | 格雷码 | 看到题先想格雷码的核心定义——相邻两码仅差一位。但题目说的是"任意两个编码",这就把"相邻"偷换成了"所有对"。用3位格雷码举反例:000与011差两位,直接证伪。这类题通法是抓住… |
| 第 24 题 | 判断题 | A | 动态规划 | 看到双层循环先盯内层方向:0/1背包内层倒序,完全背包内层正序。本题内层从 weight[i] 到 W 递增,说明同种物品可重复选,符合完全背包特征。再验证状态转移方程 dp[w]… |
| 第 25 题 | 判断题 | B | 函数与递归、时间复杂度分析、空间复杂度 | 看到递归题先画调用树。斐波那契的递归树是二叉树,深度为n,但节点数呈指数增长。时间复杂度看总调用次数,空间复杂度看栈帧最大层数。 |
建议按「限时做 → 对答案 → 读常见错误」三步走。先按考试的真实节奏做完,再回来看每一题的解析;尤其是"常见错误"那一段——它对应的是命题人反复设置的陷阱,读完能直接迁移到同类题上。
想做限时模考,可在 OI伴学 平台切换考试模式;错题会自动归集,并按考点推荐同类练习。