小代王编程-CCF-GESP-C++五级-2025年12月-真题
中国计算机学会CCF,GESP等级考试,C++五级,真题,2025年12月,(考试时间90分钟,满分100分)
小代王编程,小马老师/166.010.22166
基本信息:
姓名:
性别:
年龄:
学校:
手机号码:
一、单选题(每题 2 分,共 30 分)
第 1 题 对如下定义的循环单链表,横线处填写( )。
A.
B.
C.
D.
第 2 题 区块链技术是比特币的基础。在区块链中,每个区块指向前一个区块,构成链式列表,新区块只能接在链尾,不允许在中间插入或删除。下面代码实现插入区块添加函数,则横线处填写( )。
A.
B.
C.
D.
第 3 题 下面关于单链表和双链表的描述中,正确的是( )。?????
A. 双链表删除指定节点是O(1) ,单链表是O(1)
B. 双链表删除指定节点是O(n) ,单链表是O(1)
C. 双链表删除指定节点是O(1) ,单链表是O(n)
D. 双链表删除指定节点是O(n) ,单链表是O(n)
第 4 题 假设我们有两个数a=38 和b=14 ,它们对模m 同余,即 。以下哪个值不可能是m ?
A. 3
B. 4
C. 6
D. 9
第 5 题 下面代码实现了欧几里得算法。下面有关说法,错误的是( )。
A. gcd1() 实现为递归方式。
B. gcd2() 实现为迭代方式。
C. 当a 较大时, gcd1() 实现会多次调用自身,需要较多额外的辅助空间。
D. 当a 较大时, gcd1() 的实现比 gcd2() 执行效率更高。
第 6 题 唯一分解定理描述的内容是( )。
A. 任何正整数都可以表示为两个素数的和。
B. 任何大于1的合数都可以唯一分解为有限个质数的乘积。
C. 两个正整数的最大公约数总是等于它们的最小公倍数除以它们的乘积。
D. 所有素数都是奇数。
第 7 题 下述代码实现素数表的线性筛法,筛选出所有小于等于n 的素数,则横线上应填的代码是( )。
A. for (int j = 0; j < primes.size() && i * primes[j] <= n; j++)
B. for(int j = sqrt(n); j <= n && i * primes[j] <= n; j++)
C. for (int j = 1; j <= sqrt(n); j++)
D. for(int j = 1; j < n && i * primes[j] <= n; j++)
第 8 题 下列关于排序的说法,正确的是( )。
A. 快速排序是稳定排序
B. 归并排序通常是稳定的
C. 插入排序是不稳定排序
D. 冒泡排序不是原地排序
第 9 题 下面代码实现了归并排序。下述关于归并排序的说法中,不正确的是( )。
A. 归并排序的平均复杂度是O(nlogn) 。
B. 归并排序需要 O(n)的额外空间。
C. 归并排序在最坏情况的时间复杂度是O(n*n) 。
D. 归并排序适合大规模数据。
第 10 题 下述C++代码实现了快速排序算法,最坏情况的时间复杂度是( )。
A. O(n)
B. O(logn)
C. O(n*n)
D. O(nlogn)
第 11 题 下面代码尝试在有序数组中查找第一个大于等于 x 的元素位置。如果没有大于等于 x 的元素,返回arr.size()。以下说法正确的是( )。
A. 上述代码逻辑正确
B. 上述代码逻辑错误, while 循环条件应该用 l <= r
C. 上述代码逻辑错误, mid 计算错误
D. 上述代码逻辑错误,边界条件不对
第 12 题 小杨要把一根长度为 L 的木头切成 K 段,使得每段长度小于等于 x 。已知每切一刀只能把一段木头分成两段,他用二分法找到满足条件的最小 x ( x 为正整数),则横线处应填写( )。
A.
B.
C.
D.
第 13 题 下面给出了阶乘计算的两种方式。以下说法正确的是( )。
A. 上面两种实现方式的时间复杂度相同,都为O(n)
B. 上面两种实现方式的空间复杂度相同,都为O(n)
C. 上面两种实现方式的空间复杂度相同,都为O(1)
D. 函数 factorial1() 的时间复杂度为O(2^n) ,函数 factorial2() 的时间复杂度为O(n)
第 14 题 给定有n 个任务,每个任务有截止时间和利润,每个任务耗时 1 个时间单位、必须在截止时间前完成,且每个时间槽最多做 1 个任务。为了在规定时间内获得最大利润,可以采用贪心策略,即按利润从高到低排序,尽量安排,则横线处应填写( )。
A.
B.
C.
D.
第 15 题 下面代码实现了对两个数组表示的正整数的高精度加法(数组低位在前),则横线上应填写( )。
A. c.push_back(carry / 10); carry %= 10;
B. c.push_back(carry % 10); carry /= 10;
C. c.push_back(carry % 10);
D. c.push_back(carry); carry /= 10;
二、判断题(每题 2 分,共 20 分)
第 1 题 数组和链表都是线性表。链表的优点是插入删除不需要移动元素,并且能随机查找。
正确
错误
第 2 题 假设函数 gcd() 函数能正确求两个正整数的最大公约数,则下面的 lcm(a,b) 函数能正确找到两个正整数 a 和 b 的最小公倍数。
正确
错误
第 3 题 在单链表中,已知指针 p 指向要删除的结点(非尾结点),想在O(1)删除p,可行的做法是用p->next覆盖p的值与next,然后删除p->next。????????
正确
错误
第 4 题 在求解所有不大于 n 的素数时,线性筛法(欧拉筛)都应当优先于埃氏筛法使用,因为线性筛法的时间复杂度为O(n) ,低于埃氏筛法的O(nloglogn) 。
正确
错误
第 5 题 二分查找仅适用于有序数据。若输入数据无序,当仅进行一次查找时,为了使用二分而排序通常不划算。
正确
错误
第 6 题 通过在数组的第一个、最中间和最后一个这3个数据中选择中间值作为枢轴(比较基准),快速排序算法可降低落入最坏情况的概率。
正确
错误
第 7 题 贪心算法在每一步都做出当前看来最优的局部选择,并且一旦做出选择就不再回溯;而分治算法将问题分解为若干子问题分别求解,再将子问题的解合并得到原问题的解。
正确
错误
第 8 题 以下 fib 函数计算第 n 项斐波那契数( fib(0)=0 , fib(1)=1 ),其时间复杂度为O(n) 。
正确
错误
第 9 题 递归函数一定要有终止条件,否则可能会造成栈溢出。
正确
错误
第 10 题 使用贪心算法解决问题时,通过对每一步求局部最优解,最终一定能找到全局最优解。
正确
错误
三、编程题(每题25分,共50分)
小代王编程,小马老师/166.010.22166
关闭
更多问卷
复制此问卷