林老师 · 客观题题库 · GESP 五级 · 2025 真题
GESP 五级 · 2025 真题
五级 · 2025 真题 · 客观题 · 每题 2 分
真题 复刻
试卷编号OBJ-778871
题目总数25 题 · 50 分
试卷类型客观题
考生须知:
① 本卷为客观题单卷,合计 25 题 · 50 分 ,全部为客观题;
② 试卷右上角设有 「提交答卷」 与 「重置考试」 按钮,提交后系统自动判分并显示答题正确情况,请确认全部作答后再行提交;
③ 试卷不显示答案,提交后方可查看每题作答与正确答案的对照;
④ 答卷进度会保留在本地缓存中,刷新或再次打开仍可继续作答;
⑤ 本卷仅供学生练习使用;请勿用于其他用途;题面有问题请联系:i64coder@163.com。
当前筛选下没有题目
壹
客 观 题
25 QUESTIONS · 2 POINTS EACH
第 1 题
单选
☆
⧉
未作答
(2 分)
A 可随机访问任何一个元素
B 插入、删除操作不需要移动元素
C 无需事先估计存储空间大小
D 所需存储空间与存储元素个数成正比
GESP 五级 2025-03 · 单选 第1题 | 知识点 单向链表、一维数组
第 2 题
单选
☆
⧉
未作答
双向链表中每个结点有两个指针域 prev 和 next,分别指向该结点的前驱及后继结点。设 p 指向链表中的一个结点,它的前驱结点和后继结点均非空。要删除结点 p,则下述语句中错误的是( )。
(2 分)
A
p->next->prev = p->next;
p->prev->next = p->prev;
delete p;
B
p->prev->next = p->next;
p->next->prev = p->prev;
delete p;
C
p->next->prev = p->prev;
p->next->prev->next = p->next;
delete p;
D
p->prev->next = p->next;
p->prev->next->prev = p->prev;
delete p;
GESP 五级 2025-03 · 单选 第2题 | 知识点 双向链表、程序补全
第 3 题
单选
☆
⧉
未作答
假设双向循环链表包含头尾哨兵结点(不存储实际内容),分别为 head 和 tail,链表中每个结点有两个指针域 prev 和 next,分别指向该结点的前驱及后继结点。下面代码实现了一个空的双向循环链表,横线上应填的最佳代码是( )。
01 // 链表结点
02 template <typename T>
03 struct ListNode {
04 T data;
05 ListNode* prev;
06 ListNode* next;
07 // 构造函数
08 explicit ListNode(const T& val = T())
09 : data(val), prev(nullptr ), next(nullptr ) {}
10 };
11
12 struct LinkedList {
13 ListNode<T>* head;
14 ListNode<T>* tail;
15 };
16
17 void InitLinkedList(LinkedList* list) {
18 list->head = new ListNode<T>;
19 list->tail = new ListNode<T>;
20 ____________ // 在此处填入代码
21 }
(2 分)
A
list->head->prev = list->head;
list->tail->prev = list->head;
B
list->head->next = list->tail;
list->tail->prev = list->head;
C
list->head->next = list->tail;
list->tail->next = list->head;
D
list->head->next = list->tail;
list->tail->next = nullptr;
GESP 五级 2025-03 · 单选 第3题 | 知识点 循环链表、双向链表、程序补全
第 4 题
单选
☆
⧉
未作答
用以下辗转相除法(欧几里得算法)求 gcd(84, 60) 的步骤中,第二步计算的数是( )。
01 int gcd(int a, int b) {
02 int big = a > b ? a : b;
03 int small = a < b ? a : b;
04 if (big % small == 0) {
05 return small;
06 }
07 return gcd(small, big % small);
08 }
(2 分)
A 84 和 60
B 60 和 24
C 24 和 12
D 12 和 0
GESP 五级 2025-03 · 单选 第4题 | 知识点 最大公约数、递归、程序阅读与输出推断
第 5 题
单选
☆
⧉
未作答
根据唯一分解定理,下面整数的唯一分解是正确的( )。
(2 分)
A 18 = 3 × 6 18 = 3 \times 6 18 = 3 × 6
B 28 = 4 × 7 28 = 4 \times 7 28 = 4 × 7
C 36 = 2 × 3 × 6 36 = 2 \times 3 \times 6 36 = 2 × 3 × 6
D 30 = 2 × 3 × 5 30 = 2 \times 3 \times 5 30 = 2 × 3 × 5
GESP 五级 2025-03 · 单选 第5题 | 知识点 质因数分解
第 6 题
单选
☆
⧉
未作答
下述代码实现素数表的线性筛法,筛选出所有小于等于 n 的素数,横线上应填的最佳代码是( )。
01 vector<int > sieve_linear(int n) {
02 vector<bool > is_prime(n + 1, true );
03 vector<int > primes;
04 if (n < 2) return primes;
05 is_prime[0] = is_prime[1] = false ;
06 for (int i = 2; i <= n / 2; i++) {
07 if (is_prime[i])
08 primes.push_back(i);
09 for (int j = 0; ____________ ; j++) { // 在此处填入代码
10 is_prime[i * primes[j]] = false ;
11 if (i % primes[j] == 0)
12 break ;
13 }
14 }
15 for (int i = n / 2 + 1; i <= n; i++) {
16 if (is_prime[i])
17 primes.push_back(i);
18 }
19 return primes;
20 }
(2 分)
A j < primes.size()
B i * primes[j] <= n
C j < primes.size() && i * primes[j] <= n
D j <= n
GESP 五级 2025-03 · 单选 第6题 | 知识点 欧拉筛、程序补全
第 7 题
单选
☆
⧉
未作答
在程序运行过程中,如果递归调用的层数过多,会因为( )引发错误。
(2 分)
A 系统分配的栈空间溢出
B 系统分配的堆空间溢出
C 系统分配的队列空间溢出
D 系统分配的链表空间溢出
GESP 五级 2025-03 · 单选 第7题 | 知识点 递归、栈
第 8 题
单选
☆
⧉
未作答
对下面两个函数,说法错误的是( )。
01 int factorialA(int n) {
02 if (n <= 1) return 1;
03 return n * factorialA(n - 1);
04 }
05
06 int factorialB(int n) {
07 if (n <= 1) return 1;
08 int res = 1;
09 for (int i = 2; i <= n; i++)
10 res *= i;
11 return res;
12 }
(2 分)
A 两个函数的实现的功能相同。
B 两个函数的时间复杂度均为 O ( n ) O(n) O ( n ) 。
C factorialA 采用递归方式。
D factorialB 采用递归方式。
GESP 五级 2025-03 · 单选 第8题 | 知识点 递归、递推、for循环
第 9 题
单选
☆
⧉
未作答
(2 分)
GESP 五级 2025-03 · 单选 第9题 | 知识点 排序稳定性、选择排序
第 10 题
单选
☆
⧉
未作答
考虑以下 C++ 代码实现的快速排序算法,将数据从小到大排序,则横线上应填的最佳代码是( )。
01 int partition(vector<int >& arr, int low, int high) {
02 int pivot = arr[high]; // 基准值
03 int i = low - 1;
04 for (int j = low; j < high; j++) {
05 ____________ // 在此处填入代码
06 }
07 swap(arr[i + 1], arr[high]);
08 return i + 1;
09 }
10
11 // 快速排序
12 void quickSort(vector<int >& arr, int low, int high) {
13 if (low < high) {
14 int pi = partition(arr, low, high);
15 quickSort(arr, low, pi - 1);
16 quickSort(arr, pi + 1, high);
17 }
18 }
(2 分)
A
01 if (arr[j] > pivot) {
02 i++;
03 swap(arr[i], arr[j]);
04 }
B
01 if (arr[j] < pivot) {
02 i++;
03 swap(arr[i], arr[j]);
04 }
C
01 if (arr[j] < pivot) {
02 swap(arr[i], arr[j]);
03 i++;
04 }
D
01 if (arr[j] == pivot) {
02 i++;
03 swap(arr[i], arr[j]);
04 }
GESP 五级 2025-03 · 单选 第10题 | 知识点 快速排序、程序补全
第 11 题
单选
☆
⧉
未作答
若用二分法在 [ 1 , 100 ] [1, 100] [ 1 , 100 ] 内猜数,最多需要猜( )次。
(2 分)
A 100 100 100
B 10 10 10
C 7 7 7
D 5 5 5
GESP 五级 2025-03 · 单选 第11题 | 知识点 二分查找、时间复杂度
第 12 题
单选
☆
⧉
未作答
下面代码实现了二分查找算法,在数组 arr 找到目标元素 target 的位置,则横线上能填写的最佳代码是( )。
01 int binarySearch(int arr[], int left, int right, int target) {
02 while (left <= right) {
03 ____________ // 在此处填入代码
04 if (arr[mid] == target)
05 return mid;
06 else if (arr[mid] < target)
07 left = mid + 1;
08 else
09 right = mid - 1;
10 }
11 return -1;
12 }
(2 分)
A int mid = left + (right - left) / 2;
B int mid = left;
C int mid = (left + right) / 2;
D int mid = right;
GESP 五级 2025-03 · 单选 第12题 | 知识点 二分查找、程序补全
第 13 题
单选
☆
⧉
未作答
(2 分)
A 总是选择当前最优解
B 回溯尝试所有可能
C 分阶段解决子问题
D 总能找到最优解
GESP 五级 2025-03 · 单选 第13题 | 知识点 贪心
第 14 题
单选
☆
⧉
未作答
函数 int findMax(int arr[], int low, int high) 计算数组中最大元素,其中数组 arr 从索引 low 到 high,( )正确实现了分治逻辑。
(2 分)
A
01 if (low == high)
02 return arr[low];
03 int mid = (low + high) / 2;
04 return arr[mid];
B
01 if (low >= high)
02 return arr[low];
03 int mid = (low + high) / 2;
04 int leftMax = findMax(arr, low, mid - 1);
05 int rightMax = findMax(arr, mid, high);
06 return leftMax + rightMax;
C
01 if (low > high)
02 return 0;
03 int mid = low + (high - low) / 2;
04 int leftMax = findMax(arr, low, mid);
05 int rightMax = findMax(arr, mid + 1, high);
06 return leftMax * rightMax;
D
01 if (low == high)
02 return arr[low];
03 int mid = low + (high - low) / 2;
04 int leftMax = findMax(arr, low, mid);
05 int rightMax = findMax(arr, mid + 1, high);
06 return (leftMax > rightMax) ? leftMax : rightMax;
GESP 五级 2025-03 · 单选 第14题 | 知识点 分治、递归、程序补全
第 15 题
单选
☆
⧉
未作答
小杨编写了一个如下的高精度乘法函数,则横线上应填写的代码为( )。
01 vector<int > multiply(vector<int >& a, vector<int >& b) {
02 int m = a.size(), n = b.size();
03 vector<int > c(m + n, 0);
04 // 逐位相乘,逆序存储
05 for (int i = 0; i < m; i++) {
06 for (int j = 0; j < n; j++) {
07 c[i + j] += a[i] * b[j];
08 }
09 }
10 // 处理进位
11 int carry = 0;
12 for (int k = 0; k < c.size(); ++k) {
13 ____________ // 在此处填入代码
14 c[k] = temp % 10;
15 carry = temp / 10;
16 }
17 while (c.size() > 1 && c.back() == 0)
18 c.pop_back();
19 return c;
20 }
(2 分)
A int temp = c[k];
B int temp = c[k] + carry;
C int temp = c[k] - carry;
D int temp = c[k] * carry;
GESP 五级 2025-03 · 单选 第15题 | 知识点 高精度、程序补全
第 16 题
判断
☆
⧉
未作答
要删除单链表中某个结点 p(非尾结点),但不知道头结点,可行的操作是将 p->next 的数据拷贝到 p 的数据,将 p->next 设置为 p->next->next,然后删除 p->next。
(2 分)
GESP 五级 2025-03 · 判断 第1题 | 知识点 单向链表
第 17 题
判断
☆
⧉
未作答
链表存储线性表时要求内存中可用存储单元地址是连续的。
(2 分)
GESP 五级 2025-03 · 判断 第2题 | 知识点 单向链表
第 18 题
判断
☆
⧉
未作答
线性筛相对于埃拉托斯特尼筛法,每个合数只会被它的最小质因数筛去一次,因此效率更高。
(2 分)
GESP 五级 2025-03 · 判断 第3题 | 知识点 欧拉筛、埃氏筛
第 19 题
判断
☆
⧉
未作答
贪心算法通过每一步选择当前最优解,从而一定能获得全局最优解。
(2 分)
GESP 五级 2025-03 · 判断 第4题 | 知识点 贪心
第 20 题
判断
☆
⧉
未作答
(2 分)
GESP 五级 2025-03 · 判断 第5题 | 知识点 递归、递归函数
第 21 题
判断
☆
⧉
未作答
快速排序算法的时间复杂度与输入是否有序无关,始终稳定为 O ( n log n ) O(n \log n) O ( n log n ) 。
(2 分)
GESP 五级 2025-03 · 判断 第6题 | 知识点 快速排序、排序复杂度
第 22 题
判断
☆
⧉
未作答
归并排序算法的时间复杂度与输入是否有序无关,始终稳定为 O ( n log n ) O(n \log n) O ( n log n ) 。
(2 分)
GESP 五级 2025-03 · 判断 第7题 | 知识点 归并排序、排序复杂度
第 23 题
判断
☆
⧉
未作答
(2 分)
GESP 五级 2025-03 · 判断 第8题 | 知识点 二分查找
第 24 题
判断
☆
⧉
未作答
小杨有 100 100 100 元去超市买东西,每个商品有各自的价格,每种商品只能买 1 1 1 个,小杨的目标是买到最多数量的商品。小杨采用的策略是每次挑价格最低的商品买,这体现了分治思想。
(2 分)
GESP 五级 2025-03 · 判断 第9题 | 知识点 贪心、分治
第 25 题
判断
☆
⧉
未作答
归并排序算法体现了分治算法,每次将大的待排序数组分成大小大致相等的两个小数组,然后分别对两个小数组进行排序,最后对排好序的两个小数组合并成有序数组。
(2 分)
GESP 五级 2025-03 · 判断 第10题 | 知识点 归并排序、分治