CCF GESP 2026年9月认证 Python 5级

所有 GESP 真题,手机上也能刷 · 自动判分 · 错题自动进错题本 扫码去刷
一 单选题
共 15 道 每题 2 分 共计 30 分
第 1 题
小杨使用单向链表存放任务序列,同时记录链表的头部结点 head 和尾部结点 tail 。链表不为空,已知尾部结点 tail ,在链表末尾添加新结点的时间复杂度是( )。
class Node:
    def __init__(self, val):
        self.value = val
        self.next = None
head: Node | None
tail: Node | None
A
$O(1)$
B
$O(l o g n)$
C
$O(n)$
D
$O(n l o g n)$
第 2 题

在不带哨兵结点的双向链表中,结点 p 既不是头部结点,也不是尾部结点。删除结点 p 的正确代码是 ( )。

class Node:
    def __init__(self, val):
        self.value = val
        self.prev = None   # 指向前面结点
        self.next = None   # 指向后面结点
A
p.prev.next = p.next
p.next.prev = p.prev
B
p.prev = p.prev.next
p.next = p.next.prev
C
p.prev.next = p.prev
p.next.prev = p.next
D
p.next = p.next.next
p.prev = p.prev.prev
第 3 题
下面函数使用快慢变量查找单向链表的中间结点。横线处应填写( )。
class Node:
    def __init__(self, val):
        self.value = val
        self.next = None
def middle(head):
    slow = head
    fast = head
    while fast is not None and fast.next is not None:
        slow = slow.next
        _______________
    return slow
A
fast = fast.next
B
fast = fast.next.next
C
fast = slow.next
D
fast = slow.next.next
第 4 题
函数 gcd(a, b) 定义如下,则 gcd(105, 45) 的结果是( )。
def gcd(a, b):
    if b == 0:
        return a
    else:
        return gcd(b, a % b)
A
3
B
5
C
15
D
45
第 5 题
下面函数用于判断正整数 n 是否为质数。横线处的最佳写法是( )。
def isPrime(n):
    if n < 2:
        return False
    i = 2
    while _______________:
        if n % i == 0:
            return False
        i += 1
    return True
A
i < n
B
i <= n // 2
C
i * i < n
D
i * i <= n
第 6 题
下面代码实现线性筛(欧拉筛)。为保证每个合数只被它的最小质因子筛除一次,横线处应填写( )。
def linear_sieve(n):
    composite = [False] * (n + 1)
    primes = []
    for i in range(2, n + 1):
        if not composite[i]:
            primes.append(i)
        for p in primes:
            if i * p > n:
                break
            composite[i * p] = True
            if _______________:
                break
    return primes
A
p % i == 0
B
i % p == 0
C
i == p
D
i * p == n
第 7 题
根据唯一分解定理,整数 756 的正确质因数分解是( )。
A
$2^{2}\times3^{3}\times7$
B
$2^{3}\times3^{2}\times7$
C
$2^{2}\times3^{2}\times21$
D
$2\times3^{3}\times14$
第 8 题
函数 f(n) 定义如下,则 f(4) 的结果是( )。
def f(n):
    if n == 1:
        return 1
    return n + f(n - 1)
A
4
B
7
C
9
D
10
第 9 题

在升序数组中查找第一个严格大于 x 的元素下标,下面代码横线处应填写( )。

def upper_bound(a, x):
    l = 0
    r = len(a)
    while l < r:
        mid = l + (r - l) // 2
        if _______________:
            l = mid + 1
        else:
            r = mid
    return l
A

a[mid] < x

B

a[mid] >= x

C

a[mid] <= x

D

a[mid] > x

第 10 题

小杨需要把若干箱货物按原有顺序分配到 days 天中,每天运输连续的若干箱,求可以完成任务的最小载重量。函数 check(cap) 判断载重量为 cap 时,是否可以在规定天数运完全部货物。横线处应填写( )

l = maxWeight
r = totalWeight

while l < r:
    mid = l + (r - l) // 2
    if check(mid):
        _______________
    else:
        _______________
print(l)
A

l = mid + 1 和 r = mid

B

r = mid 和 l = mid + 1

C

r = mid - 1 和 l = mid

D

l = mid 和 r = mid - 1

第 11 题
下面是归并排序合并两个有序区间(升序排序)的片段。想要让排序算法保持稳定,横线处应当填写 ( )
while i <= mid and j <= right:
    if _______________:
        temp.append(a[i])
        i += 1
    else:
        temp.append(a[j])
        j += 1
A
a[i] < a[j]
B
a[i] > a[j]
C
a[i] >= a[j]
D
a[i] <= a[j]
第 12 题
下面快速排序的划分函数以 a[right] 作为枢轴,把不大于枢轴的元素移动到数组左侧。横线处应填写 ( )。
def partition(a, left, right):
    pivot = a[right]
    i = left - 1
    for j in range(left, right):
        if _______________:
            i += 1
            a[i], a[j] = a[j], a[i]
    a[i + 1], a[right] = a[right], a[i + 1]
    return i + 1
A
a[j] <= pivot
B
a[j] > pivot
C
a[i] <= pivot
D
a[right] < a[j]
第 13 题
小杨要在一间教室安排尽可能多场活动,每场活动拥有开始时间 start 和结束时间 end 。使用贪心算法,正确的选择策略是( )
class Activity:
    def __init__(self, s, e):
        self.start = s
        self.end = e
A
每次选择开始时间最早的活动
B
每次选择持续时间最短的活动
C
每次选择参与人数最少的活动
D
按结束时间从早到晚排序,依次选择与已选活动不冲突的活动
第 14 题
下面函数用迭代方式求解最大连续子段和。对于数组 [-2, 3, -1, 5, -6, 2] ,函数返回结果是 ( )
def maxSubArray(a):
    best = a[0]
    current = a[0]
    for i in range(1, len(a)):
        current = max(a[i], current + a[i])
        best = max(best, current)
    return best
A
5
B
6
C
7
D
8
第 15 题
数组 a 和 b 低位在前存储两个非负大整数,代码实现高精度加法,横线处应填写( )
def add(a, b):
    c = []
    carry = 0
    n = max(len(a), len(b))
    for i in range(n):
        sum_val = carry
        if i < len(a):
            sum_val += a[i]
        if i < len(b):
            sum_val += b[i]
        c.append(sum_val % 10)
        _______________
    if carry != 0:
        c.append(carry)
    return c
A
carry = sum_val % 10
B
carry = sum_val
C
carry = sum_val // 10
D
carry = c[i] // 10
单选题部分已到底了。

小程序开心码未来

微信扫码,随时随地练 GESP 真题

  • 手机刷题 · 自动判分,错题自动归档到错题本
  • 绑定网站账号后,查看答案解析等权限自动同步
开心码未来小程序二维码(微信扫一扫) 微信扫一扫