林老师 · 客观题题库 · GESP 五级 · 2025 真题

GESP 五级 · 2025 真题

五级 · 2025 真题 · 客观题 · 每题 2 分
真题
复刻
试卷编号OBJ-778871
题目总数25 题 · 50 分
试卷类型客观题
考生须知:
① 本卷为客观题单卷,合计 25 题 · 50 分,全部为客观题;
② 试卷右上角设有 「提交答卷」「重置考试」 按钮,提交后系统自动判分并显示答题正确情况,请确认全部作答后再行提交;
③ 试卷不显示答案,提交后方可查看每题作答与正确答案的对照;
④ 答卷进度会保留在本地缓存中,刷新或再次打开仍可继续作答;
⑤ 本卷仅供学生练习使用;请勿用于其他用途;题面有问题请联系:i64coder@163.com。

判 分 报 告

0 / 50 分
0
答 对 · 得 0
0
答 错 · 失 0
当前筛选下没有题目

客 观 题

25 QUESTIONS · 2 POINTS EACH
第 1 题 单选 未作答

链表不具备的特点是( )。

(2 分)
GESP 五级 2025-03 · 单选 第1题 | 知识点 单向链表、一维数组
第 2 题 单选 未作答

双向链表中每个结点有两个指针域 prevnext,分别指向该结点的前驱及后继结点。设 p 指向链表中的一个结点,它的前驱结点和后继结点均非空。要删除结点 p,则下述语句中错误的是( )。

(2 分)
GESP 五级 2025-03 · 单选 第2题 | 知识点 双向链表、程序补全
第 3 题 单选 未作答

假设双向循环链表包含头尾哨兵结点(不存储实际内容),分别为 headtail,链表中每个结点有两个指针域 prevnext,分别指向该结点的前驱及后继结点。下面代码实现了一个空的双向循环链表,横线上应填的最佳代码是( )。

01// 链表结点
02template <typename T>
03struct 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
12struct LinkedList {
13    ListNode<T>* head;
14    ListNode<T>* tail;
15};
16
17void InitLinkedList(LinkedList* list) {
18    list->head = new ListNode<T>;
19    list->tail = new ListNode<T>;
20    ____________      // 在此处填入代码
21}

(2 分)
GESP 五级 2025-03 · 单选 第3题 | 知识点 循环链表、双向链表、程序补全
第 4 题 单选 未作答

用以下辗转相除法(欧几里得算法)求 gcd(84, 60) 的步骤中,第二步计算的数是( )。

01int 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 分)
GESP 五级 2025-03 · 单选 第4题 | 知识点 最大公约数、递归、程序阅读与输出推断
第 5 题 单选 未作答

根据唯一分解定理,下面整数的唯一分解是正确的( )。

(2 分)
GESP 五级 2025-03 · 单选 第5题 | 知识点 质因数分解
第 6 题 单选 未作答

下述代码实现素数表的线性筛法,筛选出所有小于等于 n 的素数,横线上应填的最佳代码是( )。

01vector<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 分)
GESP 五级 2025-03 · 单选 第6题 | 知识点 欧拉筛、程序补全
第 7 题 单选 未作答

在程序运行过程中,如果递归调用的层数过多,会因为( )引发错误。

(2 分)
GESP 五级 2025-03 · 单选 第7题 | 知识点 递归、栈
第 8 题 单选 未作答

对下面两个函数,说法错误的是( )。

01int factorialA(int n) {
02    if (n <= 1) return 1;
03    return n * factorialA(n - 1);
04}
05
06int 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 分)
GESP 五级 2025-03 · 单选 第8题 | 知识点 递归、递推、for循环
第 9 题 单选 未作答

下算法中,( )是不稳定的排序。

(2 分)
GESP 五级 2025-03 · 单选 第9题 | 知识点 排序稳定性、选择排序
第 10 题 单选 未作答

考虑以下 C++ 代码实现的快速排序算法,将数据从小到大排序,则横线上应填的最佳代码是( )。

01int 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// 快速排序
12void 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 分)
GESP 五级 2025-03 · 单选 第10题 | 知识点 快速排序、程序补全
第 11 题 单选 未作答

若用二分法在 [1,100][1, 100] 内猜数,最多需要猜( )次。

(2 分)
GESP 五级 2025-03 · 单选 第11题 | 知识点 二分查找、时间复杂度
第 12 题 单选 未作答

下面代码实现了二分查找算法,在数组 arr 找到目标元素 target 的位置,则横线上能填写的最佳代码是( )。

01int 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 分)
GESP 五级 2025-03 · 单选 第12题 | 知识点 二分查找、程序补全
第 13 题 单选 未作答

贪心算法的核心特征是( )。

(2 分)
GESP 五级 2025-03 · 单选 第13题 | 知识点 贪心
第 14 题 单选 未作答

函数 int findMax(int arr[], int low, int high) 计算数组中最大元素,其中数组 arr 从索引 lowhigh,( )正确实现了分治逻辑。

(2 分)
GESP 五级 2025-03 · 单选 第14题 | 知识点 分治、递归、程序补全
第 15 题 单选 未作答

小杨编写了一个如下的高精度乘法函数,则横线上应填写的代码为( )。

01vector<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 分)
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(nlogn)O(n \log n)

(2 分)
GESP 五级 2025-03 · 判断 第6题 | 知识点 快速排序、排序复杂度
第 22 题 判断 未作答

归并排序算法的时间复杂度与输入是否有序无关,始终稳定为 O(nlogn)O(n \log n)

(2 分)
GESP 五级 2025-03 · 判断 第7题 | 知识点 归并排序、排序复杂度
第 23 题 判断 未作答

二分查找适用于对无序数组和有序数组的查找。

(2 分)
GESP 五级 2025-03 · 判断 第8题 | 知识点 二分查找
第 24 题 判断 未作答

小杨有 100100 元去超市买东西,每个商品有各自的价格,每种商品只能买 11 个,小杨的目标是买到最多数量的商品。小杨采用的策略是每次挑价格最低的商品买,这体现了分治思想。

(2 分)
GESP 五级 2025-03 · 判断 第9题 | 知识点 贪心、分治
第 25 题 判断 未作答

归并排序算法体现了分治算法,每次将大的待排序数组分成大小大致相等的两个小数组,然后分别对两个小数组进行排序,最后对排好序的两个小数组合并成有序数组。

(2 分)
GESP 五级 2025-03 · 判断 第10题 | 知识点 归并排序、分治