选择题 共15道
判断题 共10道
编程题 共2道
与数组相比,链表在( )操作上通常具有更高的效率。
下面C++代码实现双向链表。函数 is_empty() 判断链表是否为空,如链表为空返回 true ,否则返回 false 。横线处不能填写( )。
基于上题代码正确的前提下,填入相应代码完善 append() ,用于在双向链表尾部增加新节点,横线上应填写( )。
下列C++代码用循环链表解决约瑟夫问题,即假设 n 个人围成一圈,从第一个人开始数,每次数到第 k 个的人就出圈,输出最后留下的那个人的编号。横线上应填写( )。
下列C++代码判断一个正整数是否是质数,说法正确的是( )。
下列C++代码用两种方式求解两个正整数的最大公约数,说法错误的是( )。
下面的代码用于判断整数 是否是质数,错误的说法是( )。
唯一分解定理描述了关于正整数的什么性质?
下面的C++代码执行后,其输出是( )。
int x = 10, y = 20;
x = x + y;
y = x - y;
x = x - y;
cout << x << ' ' << y;
定义整型变量 int a=16 ,则执行 ++a += 3 之后,a的值会是( )。
下面的C++代码,用于求一系列数据中的最大值。有关其算法说法错误的是( )。
下面的 C++ 代码用于在升序数组 lst 中查找目标值 target 最后一次出现的位置。相关说法,正确的是( )。
有关下面C++代码的说法,错误的是( )。
关于下述C++代码的快速排序算法,说法错误的是( )。
小杨编写了一个如下的高精度除法函数,则横线上应填写的代码为( )。
下面C++代码是用欧几里得算法(辗转相除法)求两个正整数的最大公约数, a 大于 b 还是小于 b 都适用。
假设函数 gcd() 函数能正确求两个正整数的最大公约数,则下面的 lcm() 函数能求相应两数的最小公倍数。
下面的C++代码用于输出每个数对应的质因数列表,输出形如: {5: [5], 6: [2, 3], 7: [7], 8: [2, 2, 2]} 。
下面的C++代码实现归并排序。代码在执行时,将输出一次 HERE 字符串,因为merge()函数仅被调用一次。
归并排序的最好、最坏和平均时间复杂度均为
查字典这个小学生必备技能,可以把字典视为一个已排序的数组。假设小杨要查找一个音首字母为 g 的单词,他首先翻到字典约一半的页数,发现该页的首字母是 m ,由于字母表中 g 位于 m 之前,所以排除字典后半部分,查找范围缩小到前半部分;不断重复上述步骤,直至找到首字母为 g 的页码。这种查字典的一系列操作可看作二分查找。
求解下图中A点到D点最短路径,其中A到B之间的12可以理解为距离。求解这样的问题常用Dijkstra算法,其思路是通过逐步选择当前距离起点最近的节点来求解非负权重图(如距离不能为负值)单源最短路径的算法。从该算法的描述可以看出,Dijkstra算法是贪心算法。
分治算法将原问题可以分解成规模更小的子问题,使得求解问题的难度降低。但由于分治算法需要将问题进行分解,并且需要将多个子问题的解合并为原问题的解,所以分治算法的效率通常比直接求解原问题的效率低。
函数 puzzle 定义如下,则调用 puzzle(7) 程序会无限递归。
如下为线性筛法,用于高效生成素数表,其核心思想是每个合数只被它的最小质因数筛掉一次,时间复杂度为