c++评估卷1
C++
120分钟
总分 100.0
27 题
试卷题目预览
第1题
中级
2分
单选
给定一个整数数组nums,下面代码找到一个具有最大和的连续子数组,并返回该最大和。则下面说法错误的是( )。

第2题
中级
2分
单选
下面的C++代码用于在升序数组lst中查找目标值target最后一次出现的位置。相关说法,正确的是( )。

第3题
中级
2分
单选
链表不具备的特点是( )。
第4题
中级
2分
单选
假设双向循环链表包含头尾哨兵结点(不存储实际内容),分别为head和tail,链表中每个结点有两个指针域prev和next。下面代码实现了一个空的双向循环链表,

第5题
中级
2分
单选
下面关于链表和数组的描述,错误的是( )。
第6题
中级
2分
单选
下面关于归并排序,描述正确的是( )。
第7题
中级
2分
单选
给定一个长度为n的有序数组nums,其中所有元素都是唯一的。下面的函数返回数组中元素target的索引。关于上述函数,描述不正确的是( )。

第8题
中级
2分
单选
关于分治算法,以下哪个说法正确?
第9题
中级
2分
单选
下述代码实现素数表的线性筛法,筛选出所有小于等于n的素数,则横线上应填的代码是( )。

第10题
中级
2分
单选
上题代码的时间复杂度是( )。
第11题
中级
2分
单选
为了正确实现快速排序,下面横线上的代码应为( )。

第12题
中级
2分
单选
辗转相除法也被称为( )
第13题
中级
2分
单选
归并排序的基本思想是( )。
第14题
中级
2分
单选
在快速排序中,选择的主元素(pivot)会影响算法的( )。
第15题
中级
2分
判断
归并排序的时间复杂度是O(n log n)。( )
第16题
中级
2分
判断
小杨在生日聚会时拿一块H*W的巧克力招待来的K个小朋友,保证每位小朋友至少能获得一块相同大小的巧克力。那么小杨想分出来最大边长的巧克力可以使用二分法。( )
第17题
中级
25分
编程
小杨的幸运数
小杨认为,所有大于等于a的完全平方数都是他的超级幸运数。
小杨还认为,所有超级幸运数的倍数都是他的幸运数。自然地,小杨的所有超级幸运数也都是幸运数。
对于一个非幸运数,小杨规定,可以将它一直+1,直到它变成一个幸运数。我们把这个过程叫做幸运化。
现在,小杨给出T个数,请你首先判断它们是不是幸运数;接着,对于非幸运数,请你将它们幸运化。
【输入格式】
第一行2个正整数a和T。 接下来T行,每行一个正整数x,表示需要判断(幸运化)的数。
【输出格式】
输出T行,对于每个给定的x,如果它是幸运数,请输出lucky,否则请输出将其幸运化后的结果。
【样例输入】 2 4 1 4 5 9 【样例输出】 4 lucky 8 lucky 对于所有测试点,保证1<=a<=10^6;保证1<=T<=10^5;保证1<=x<=10^6。
第18题
中级
25分
编程
烹饪问题
有N种食材,编号从1至N,其中第i种食材的美味度为ai。
不同食材之间的组合可能产生奇妙的化学反应。具体来说,如果两种食材的美味度分别为x和y,那么它们的契合度为x & y。
其中,&运算为按位与运算。现在,请你找到契合度最高的两种食材,并输出它们的契合度。
【输入格式】
第一行一个整数N,表示食材的种数。 接下来一行N个用空格隔开的整数,依次为a1到aN,表示各种食材的美味度。
【输出格式】
输出一行一个整数,表示最高的契合度。
【样例输入1】 3 1 2 3 【样例输出1】 2 【样例输入2】 5 5 6 2 10 13 【样例输出2】 8 对于所有测试点,保证2<=N<=10^6,1<=ai<=2^31-1。
第19题
中级
2分
单选
有若干根木头,长度存于 wood 。每切一刀可以把一段木头分成两段。函数 check(wood, K, x) 返回: 用不超过 K 刀,能否使所有木段长度都不超过 x 。下面代码使用二分答案查找最小可行的 x ,横线处应填( )
int binary_cut(vector& wood, int K) {
int l = 1;
int r = 0;
for (int len : wood) r = max(r, len);
while (l < r) {
int mid = l + (r - l) / 2;
if (check(wood, K, mid))
________________; // 在此处填入代码
else l = mid + 1;
}
return l;
}
第20题
中级
2分
判断
数组的存储空间在物理上通常是连续的,而链表的结点可以存储在不连续的内存空间中。
第21题
中级
2分
判断
对任意正整数 a、b,以下两种写法的 gcd 函数返回值完全相同。
int gcd1(int a, int b) {
return b ? gcd1(b, a % b) : a;
}
int gcd2(int a, int b) {
while (b) {
int t = b;
b = a % b;
a = t;
}
return a;
}
第22题
中级
2分
判断
分治法通常将一个规模较大的问题拆分为若干个规模较小、结构相似的子问题,分别求解后再合并子问题的结果。
第23题
中级
2分
判断
贪心算法只要每一步选择当前最优解,就一定能得到全局最优解。
第24题
中级
2分
判断
二分查找不仅可以应用于有序数组,也可以在不增加时间复杂度的情况下应用于有序的单链表,因为链表也支持 O(1) 时间内的随机访问。
第25题
中级
2分
判断
以下函数 f1 的时间复杂度比函数 f2 的更高。
void f1(int n) {
for (int i = 1; i < n; i *= 2);
}
void f2(int n) {
if (n <= 1) return;
f2(n - 1);
f2(n - 1);
}
第26题
中级
2分
判断
唯一分解定理表明,任何一个大于 1 的自然数都可以唯一地分解为若干个质数的乘积,如果不考虑质因数的顺序,这种分解方式是唯一的。
第27题
中级
2分
判断