试卷总分:100分
选择题 15题 30分
判断题 10题 20分
编程题 2题 50分
下列C++代码的输出结果是()。
#include <iostream> using namespace std ; int main() { int a = 5 , b = 3 ; cout << (a & b) + (a | b) << endl; return 0 ; }
使用cmath 或math .h 中的数学库函数,下列说法中正确的是()。
有4个字符,出现次数分别为1、2、3、4。构造哈夫曼树后,出现次数为1的字符的哈夫曼编码长度为()。
从4×5个点连接成的⽹格的左上角⾛到右下角,每次只能向右或向下移动,不同的路径共有()条。
在含有n个结点的⼆叉排序树中查找⼀个元素,平均时间复杂度和最坏时间复杂度分别为()。
有4堆⽯⼦,数量分别为1、2、3、4。每次可以合并相邻两堆,合并代价为两堆⽯⼦数之和。将所有⽯⼦合并成⼀堆的最⼩总代价为()。
在⽆权图中,使⽤BFS 从起点开始遍历,并在访问由结点u 扩展的相邻结点v 时记录dist[v] = dist[u] + 1,且起点的dist 为0,则最终dist[v] 表⽰的是()。
在⼆维⽹格上实现泛洪填充时,为了防⽌递归层数过深,最适合的⾮递归实现⽅式是()。
关于哈希表,下列说法正确的是()。
#include <iostream> using namespace std ; void inc(int &x) { x++; } int main() { int a = 3 ; inc(a); cout << a ; return 0 ; }
⽤动态规划求两个序列s1和s2的最长公共⼦序列长度,若dp[i][j] 表⽰s1前i 个元素与s2前j 个元素的LCS 长度。当s1[i-1]=s2[j-1]时,正确的状态转移是()。
下列代码是⼀维数组优化0/1 背包的核⼼⽚段,执⾏后dp[8] 的输出结果是()。
#include <iostream> #include <algorithm> using namespace std ; int main() { int w = 3 , v = 5 , W = 8; int dp [9] = {0 }; for (int c = W; c >= w; c--) dp [c] = max (dp [c], dp [c - w] + v); cout << dp [8] << endl; return 0 ; }
若要求排序后相等元素的相对顺序保持不变,下列排序算法中最不适宜使⽤的是()。
下列代码⽚段的时间复杂度为()。
long long s = 0 ; for (int i = 1; i <= n ; i++) for (int j = 1; j <= n ; j += i) s += i + j ;
已知int a [6] = {1 , 3 , 5 , 7 , 9 , 11}; int *p = a + 1;,则表达式*(p + 3) 的值是()。
使⽤cmath 或math.h 中的函数,表达式exp(0) 的结果值为1.0,且类型为double。
采⽤开放定址法处理冲突的哈希表中,删除⼀个元素后可以直接将该位置置空,不会影响后续查找。
在哈夫曼树中,出现次数更多的叶⼦结点,其深度总是更⼩。
在⼀个有向图中,所有顶点的⼊度之和总是等于所有顶点的出度之和。
⼴度优先搜索通常借助队列实现,深度优先搜索通常借助栈或递归实现。
快速排序的平均时间复杂度为O(n log n),最坏时间复杂度也为O(n log n)。
为解决0/1 背包问题,使⽤⼀维数组优化时,内层容量循环应从⼤到⼩枚举。
使⽤邻接表存储图时,遍历某个顶点的所有邻边所需时间与图中顶点数成正⽐。
在按层序从1开始对结点编号的完全⼆叉树中,编号为i(i>1)的结点的⽗结点编号为[i/2]。
在定义了数组int arr [10]; 后,表达式arr 和表达式&arr[0] 总是等价的。
试题名称:括号序列
时间限制:1.0 s
内存限制:512.0 MB