CCF GESP 2026年9月认证 Python 5级
所有 GESP 真题,手机上也能刷 · 自动判分 · 错题自动进错题本 扫码去刷
一
单选题
第 1 题
小杨使用单向链表存放任务序列,同时记录链表的头部结点
head 和尾部结点 tail 。链表不为空,已知尾部结点 tail ,在链表末尾添加新结点的时间复杂度是( )。class Node:
def __init__(self, val):
self.value = val
self.next = None
head: Node | None
tail: Node | None
第 2 题
在不带哨兵结点的双向链表中,结点 p 既不是头部结点,也不是尾部结点。删除结点 p 的正确代码是 ( )。
class Node:
def __init__(self, val):
self.value = val
self.prev = None # 指向前面结点
self.next = None # 指向后面结点
第 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
第 4 题
函数
gcd(a, b) 定义如下,则 gcd(105, 45) 的结果是( )。def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a % b)
第 5 题
下面函数用于判断正整数
n 是否为质数。横线处的最佳写法是( )。def isPrime(n):
if n < 2:
return False
i = 2
while _______________:
if n % i == 0:
return False
i += 1
return True
第 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
第 7 题
根据唯一分解定理,整数
756 的正确质因数分解是( )。
第 8 题
函数
f(n) 定义如下,则 f(4) 的结果是( )。def f(n):
if n == 1:
return 1
return n + f(n - 1)
第 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
第 10 题
小杨需要把若干箱货物按原有顺序分配到 days 天中,每天运输连续的若干箱,求可以完成任务的最小载重量。函数 check(cap) 判断载重量为 cap 时,是否可以在规定天数运完全部货物。横线处应填写( )
l = maxWeight
r = totalWeight
while l < r:
mid = l + (r - l) // 2
if check(mid):
_______________
else:
_______________
print(l)
第 11 题
下面是归并排序合并两个有序区间(升序排序)的片段。想要让排序算法保持稳定,横线处应当填写 ( )
while i <= mid and j <= right:
if _______________:
temp.append(a[i])
i += 1
else:
temp.append(a[j])
j += 1
第 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
第 13 题
小杨要在一间教室安排尽可能多场活动,每场活动拥有开始时间
start 和结束时间 end 。使用贪心算法,正确的选择策略是( )class Activity:
def __init__(self, s, e):
self.start = s
self.end = e
第 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
第 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
单选题部分已到底了。