信奥刷题站
GESP 认证 5级2026-06

GESP C++ 五级 模拟卷2

题量
27 题
客观题
25 题
建议时长
120 分钟
卷面总分
100 分

GESP C++ 五级模拟卷2(循环链表、归并排序、分治算法、高精度计算、递归与迭代)

开始整卷模拟计时作答 · 交卷即时判分 · 错题自动进错题本(需登录)2 道编程大题:在线只判客观题,编程题请自行前往洛谷等 OJ 提交验证

// questions

题目预览

1
单选题2

在循环链表中删除结点 p(p 不是唯一结点),以下代码横线处应填入( )

prev->next = p->next;
delete p;
______;
A

p = prev;

B

p = p->next;

C

prev = prev->next;

D

p = prev->next;

2
单选题2

以下高精度加法代码中,横线处应填入( )

vector<int> add(vector<int> a, vector<int> b) {
    vector<int> c;
    int carry = 0;
    for (int i = 0; i < a.size() || i < b.size(); i++) {
        if (i < a.size()) carry += a[i];
        if (i < b.size()) carry += b[i];
        ______;
        carry /= 10;
    }
    if (carry) c.push_back(carry);
    return c;
}
A

c.push_back(carry % 10);

B

c.push_back(carry / 10);

C

c.push_back(carry); carry %= 10;

D

carry = carry % 10; c.push_back(carry);

3
单选题2

分治算法的基本思想是( )

A

每一步选择当前最优解,逐步逼近全局最优解

B

将原问题分解为规模更小的子问题,分别求解后合并

C

通过穷举所有可能的解来寻找最优解

D

从初始状态出发,每次随机选择一个方向前进

4
单选题2

快速排序中随机选择基准值(pivot)的主要目的是( )

A

保证排序是稳定的

B

减少额外空间的使用

C

避免最坏情况 O(n²) 的发生概率

D

使代码实现更简单

5
单选题2

以下关于递归与迭代的说法,正确的是( )

A

递归程序一定比迭代程序运行快

B

递归程序占用的空间一定比迭代少

C

递归程序不可能出现无限循环

D

理论上所有递归算法都可以转换为迭代算法

6
单选题2

在双向链表头部插入新结点 t(head 为头哨兵),以下代码横线处应填入( )

t->next = head->next;
t->prev = head;
head->next->prev = t;
______;
A

head->next = t;

B

head->prev = t;

C

t->prev = head->next;

D

t->next = head;

7
单选题2

以下二分查找的变体用于查找第一个大于等于 target 的位置(lower_bound),横线处应填入( )

int lower_bound(vector<int>& arr, int target) {
    int l = 0, r = arr.size();
    while (l < r) {
        int mid = l + (r - l) / 2;
        if (______) r = mid;
        else l = mid + 1;
    }
    return l;
}
A

arr[mid] > target

B

arr[mid] >= target

C

arr[mid] < target

D

arr[mid] <= target

8
单选题2

标准 3 柱汉诺塔问题中,移动 n 个盘子所需的最少移动次数是( )

A

O(n)

B

O(n log n)

C

O(2ⁿ)

D

O(n²)

9
单选题2

硬币找零问题中,面额为 {1, 5, 10, 25} 分,要找零 40 分。使用贪心策略,得到的硬币数是( )

A

2 枚

B

3 枚

C

4 枚

D

5 枚

10
单选题2

高精度乘法中,两个位数分别为 m 和 n 的数相乘,结果最多有多少位?( )

A

m + n

B

m × n

C

m + n + 1

D

max(m, n)

11
单选题2

以下归并排序的 merge 函数中,横线处应填入( )

void merge(int arr[], int left, int mid, int right) {
    int n1 = mid - left + 1, n2 = right - mid;
    int L[n1], R[n2];
    for (int i = 0; i < n1; i++) L[i] = arr[left + i];
    for (int i = 0; i < n2; i++) R[i] = arr[mid + 1 + i];
    int i = 0, j = 0, k = left;
    while (i < n1 && j < n2) {
        if (______) arr[k++] = L[i++];
        else arr[k++] = R[j++];
    }
    while (i < n1) arr[k++] = L[i++];
    while (j < n2) arr[k++] = R[j++];
}
A

L[i] > R[j]

B

L[i] <= R[j]

C

L[i] >= R[j]

D

L[i] != R[j]

12
单选题2

递归函数 fib(n) 使用朴素递归计算斐波那契数,其时间复杂度是( )

A

O(n)

B

O(n log n)

C

O(2ⁿ)

D

O(1)

13
单选题2

循环链表中,要判断指针 p 是否遍历完整个链表回到起点,条件是( )

A

p == NULL

B

p->next == NULL

C

p->data == 0

D

p == head

14
单选题2

以下关于 GCD(最大公约数)的叙述,正确的是( )

A

gcd(a, b) = gcd(b, a % b)(当 b ≠ 0)是辗转相除法的核心递推式

B

gcd(a, b) 总是等于 a 和 b 中较小的那个数

C

gcd(0, n) 没有定义

D

辗转相除法的时间复杂度是 O(n)

15
单选题2

分治算法解决"最大子数组和"问题时,需要计算跨越中点的最大和,这部分的复杂度是( )

A

O(1)

B

O(n)

C

O(n²)

D

O(log n)

16
判断题2

在循环链表中,每个结点都有一个前驱结点和一个后继结点。( )

17
判断题2

高精度加法的时间复杂度与两个数的位数之和成正比,即 O(n)。( )

18
判断题2

分治算法的效率一定比直接求解原问题的效率高。( )

19
判断题2

归并排序需要额外的 O(n) 空间来存放临时数组。( )

20
判断题2

快速排序在任何输入情况下都能保证 O(n log n) 的时间复杂度。( )

21
判断题2

理论上所有递归算法都可以转换为等价的迭代算法。( )

22
判断题2

贪心算法在做出选择后,如果发现选择不是最优的,会回溯重新选择。( )

23
判断题2

标准 3 柱汉诺塔问题中,移动 n 个盘子所需的最少步数为 2ⁿ − 1。( )

24
判断题2

链表结点在内存中必须连续存放。( )

25
判断题2

高精度乘法和除法的实现都涉及逐位相乘和进位处理,两者时间复杂度相同。( )

GESP 编程操作题
26
编程题25

试题名称:高精度加法

时间限制:1.0 s | 内存限制:512.0 MB

给定两个非负整数(可能非常大,位数不超过 200 位),求它们的和。

输入格式 两行,每行一个非负整数,位数不超过 200 位。

输出格式 一行,一个整数,表示两个数的和。不要输出前导零(除非结果为 0)。

样例输入 #1

12345678901234567890
98765432109876543210

样例输出 #1

111111111011111111100
本题为编程大题:请复制题面到洛谷 / GESP OJ 等平台编写并提交代码(本站不判分)
27
编程题25

试题名称:归并排序

时间限制:1.0 s | 内存限制:512.0 MB

给定 N 个整数,请使用归并排序将它们按升序排列后输出。

输入格式 第一行,一个正整数 N(1 ≤ N ≤ 100000)。 第二行,N 个整数,绝对值不超过 10⁹,数之间用空格分隔。

输出格式 一行,N 个整数,按升序排列,数之间用一个空格分隔。

样例输入 #1

5
3 1 4 1 5

样例输出 #1

1 1 3 4 5
本题为编程大题:请复制题面到洛谷 / GESP OJ 等平台编写并提交代码(本站不判分)