C++信奥赛能力阶段性测试(一)

C++ 120分钟 总分 100.0 27 题
试卷题目预览
第1题 中级 2分 单选
栈的操作特点是( )。
A. 先进先出
B. 先进后出
C. 随机访问
D. 双端进出
第2题 中级 2分 单选
已知二叉树的中序遍历是[D,B,E,A,F,C],先序遍历是[A,B,D,E,C,F]。请问该二叉树的后序遍历结果是( )。
A. [D,E,B,F,C,A]
B. [D,B,E,F,C,A]
C. [D,E,B,C,F,A]
D. [B,D,E,F,C,A]
第3题 中级 2分 单选
请将下列C++实现的深度优先搜索(DFS)代码补充完整,横线处应填入( )。

A. result.push_back(root->val); dfs(root->left, result); dfs(root->right, result);
B. result.push_back(root->left->val); dfs(root->right, result); dfs(root->left, result);
C. result.push_back(root->left->val); dfs(root->left, result); dfs(root->right, result);
D. result.push_back(root->right->val); dfs(root->right, result); dfs(root->left, result);
第4题 中级 2分 单选
以下代码用于检查字符串中的括号是否匹配,横线上应填写( )。

A. true
B. false
C. st.empty()
D. !st.empty()
第5题 中级 2分 单选
阅读以下代码,下面哪一项是正确的?

A. 栈s的输出顺序是1 2 3 4 5,队列q的输出顺序是5 4 3 2 1。
B. 栈s的输出顺序是5 4 3 2 1,队列q的输出顺序是1 2 3 4 5。
C. 栈s的输出顺序是1 2 3 4 5,队列q的输出顺序是1 2 3 4 5。
D. 栈s的输出顺序是1 2 3 4 5,队列q的输出顺序是1 2 3 4 5,程序不会正常执行。
第6题 中级 2分 单选
采用如下代码实现检查输入的字符串括号是否匹配,横线上应填入的代码为( )。

A. top = st.top(); st.pop();
B. st.pop(); top = st.top();
C. st.pop(); top = st.front();
D. top = st.front(); st.pop();
第7题 中级 2分 单选
假设字母表{a,b,c,d,e}在字符串出现的频率分别为10%,15%,30%,16%,29%。若使用哈夫曼编码方式对字母进行二进制编码,则字符abcde分别对应的一组哈夫曼编码的长度分别为( )。
A. 4, 4, 1, 3, 2
B. 3, 3, 2, 2, 2
C. 3, 3, 1, 2, 1
D. 4, 4, 1, 2, 2
第8题 中级 2分 单选
向一个栈顶为hs的链式栈中插入一个指针为s的结点时,应执行( )。
A. hs->next = s;
B. s->next = hs; hs = s;
C. s->next = hs->next; hs->next = s;
D. s->next = hs; hs = hs->next;
第9题 中级 2分 单选
在栈数据结构中,元素的添加和删除是按照什么原则进行的?
A. 先进先出
B. 先进后出
C. 最小值先出
D. 随机顺序
第10题 中级 2分 单选
青蛙每次能跳1或2步,下面代码计算青蛙跳到第n步台阶有多少种不同跳法。则下列说法,错误的是( )。

A. 函数jump_recur()采用递归方式。
B. 函数jump_dp()采用动态规划方法。
C. 当n较大时,函数jump_recur()存在大量重复计算,执行效率低。
D. 函数jump_recur()代码量小,执行效率高。
第11题 中级 2分 单选
线性筛法与埃氏筛法相比的优势是( )。
A. 更容易实现
B. 更节省内存
C. 更快速
D. 更准确
第12题 中级 2分 单选
以下代码使用了辗转相除法求解最大公因数,请在横线处填入( ),使其能正确实现相应功能。

A. int temp = b; b = a / b; a = temp;
B. int temp = a; a = b / a; b = temp;
C. int temp = b; b = a % b; a = temp;
D. b = a % b; a = b;
第13题 中级 2分 单选
小杨想编写一个判断任意输入的整数N是否为素数的程序,下面哪个方法不合适?( )
A. 埃拉筛法
B. 线性筛法
C. 二分答案
D. 枚举法
第14题 中级 2分 单选
内排序有不同的类别,下面哪种排序算法和冒泡排序是同一类?( )
A. 希尔排序
B. 快速排序
C. 堆排序
D. 插入排序
第15题 中级 2分 单选
有关下面C++代码的说法正确的是( )。(链表节点定义)

A. 上述代码构成单向链表
B. 上述代码构成双向链表
C. 上述代码构成循环链表
D. 上述代码构成指针链表
第16题 中级 2分 判断
程序运行后会输出 2。

#include <iostream>
#include <stack>
using namespace std;
int main() {
stack<int> s;
s.push(1);
s.push(2);
s.push(3);
s.pop();
s.pop();
cout << s.top() << endl;
return 0;
}

T. 正确
F. 错误
第17题 中级 2分 判断
哈夫曼编码一定唯一,只要字符频率相同,得到的编码也一定完全相同。
T. 正确
F. 错误
第18题 中级 2分 判断
在C++ STL中,栈(std::stack)的pop操作返回栈顶元素并移除它。
T. 正确
F. 错误
第19题 中级 2分 判断
下面代码实现了动态规划版本的斐波那契数列计算,其时间复杂度是O(n)。

T. 正确
F. 错误
第20题 中级 2分 判断
在树的深度优先搜索(DFS)中,使用栈作为辅助数据结构以实现"先进后出"的访问顺序。
T. 正确
F. 错误
第21题 中级 2分 判断
以下代码实现的是二叉树的中序遍历:

T. 正确
F. 错误
第22题 中级 2分 判断
栈和队列均可以用双向链表实现,插入和删除操作的时间复杂度为O(1)。
T. 正确
F. 错误
第23题 中级 2分 判断
下面的代码实现了二叉树的前序遍历,它通过递归方法访问每个节点并打印节点值。

T. 正确
F. 错误
第24题 中级 2分 判断
C++、Python和JAVA等都是面向对象的编程语言。
T. 正确
F. 错误
第25题 中级 2分 判断
哈夫曼编码本质上是一种贪心策略。
T. 正确
F. 错误
第26题 中级 25分 编程
好斗的牛

你有M个牛棚,从左到右一字排开。你希望把N头牛安置到牛棚里。麻烦的是,你的牛很好斗,如果他们附近有其他的牛,他们就会不安分地去挑事。其中,第i头牛的攻击范围是b[i],这意味着,如果他的左边b[i]个牛棚或右边b[i]个牛棚里有其他牛,他就会去挑事。你想留下连续的一段牛棚,并把其他牛棚都卖掉。请问你最少需要留下多少牛棚,才能保证至少存在一种方案能够把所有的N头牛都安置进剩余的牛棚里,且没有牛会挑事?

【输入格式】
第一行1个正整数N。
接下来一行N个用空格隔开的正整数a[i]。
接下来一行N个用空格隔开的正整数b[i]。
【输出格式】
输出一行一个整数,表示你最少需要留下多少牛棚。
【样例输入1】

2
1 2
1 2
【样例输出1】

4
【样例解释1】

你可以留下4个牛棚,并如此安排你的牛:
牛棚1    牛棚2    牛棚3    牛棚4
牛1              牛2
【样例输入2】

3
1 2 3
3 2 1
【样例输出2】

7
对于20%的测试点,保证N≤8。
对于50%的测试点,保证N≤1000。
对于100%的测试点,保证N≤100000,1≤a[i],b[i]≤10^9。
第27题 中级 25分 编程
黑白方块

时间限制:1.0s 内存限制:512.0MB
小杨有一个n行m列的网格图,其中每个格子要么是白色,要么是黑色。小杨想知道网格图中是否存在一个满足如下条件的子矩形:
• 子矩形由4行4列组成
• 子矩形的第1行和第4行只包含白色格子
• 对于子矩形的第2行和第3行,只有第1个和第4个格子是白色的,其余格子都是黑色的

【输入格式】
第一行包含一个正整数t,代表测试用例组数。对于每组测试用例:第一行包含两个正整数n,m。之后n行,每行一个长度为m的01串,0代表白色,1代表黑色。
【输出格式】
对于每组测试用例,如果存在,输出Yes,否则输出No。
【样例输入】
3
1 4
0110
5 5
00000
01100
01100
00001
01100
5 5
00000
01100
01110
00001
01100
【样例输出】
No
Yes
No
对于全部数据,保证有1≤t≤10,1≤n,m≤100。
💬