GESP2025年09月Python五级试卷

从PDF导入:GESP2025年09月Python五级试卷

Python 180分钟 总分 100.0 27 题
试卷题目预览
第1题 中级 2.0分 单选
以下哪种情况使用链表比数组更合适?( )
A. 数据量固定且读多写少
B. 需要频繁在中间或开头插入、删除元素
C. 需要高效随机访问元素
D. 存储空间必须连续
第2题 中级 2.0分 单选
下面的Python代码实现删除链表中所有结点值等于val的节点,则横线处填写( )。

def removeElements(head, val):
dummy = ListNode(0, head)
cur = dummy
while cur.next:
if cur.next.val == val:
——————————————————————————————————
del del_node
else:
cur = cur.next
return dummy.next

A. del_node = del_node.next; cur.next = del_node.next
B. del_node = cur.next; cur = del_node.next
C. del_node = cur.next; cur.next = del_node.next
D. del_node = cur.next; cur.next = del_node
第3题 中级 2.0分 单选
下列Python代码用Floyd判断单链表中是否存在环,横线上应填写( )。

def hasCycle(head):
if not head or not head.next:
return False
slow = head
fast = head.next
while fast and fast.next:
if slow == fast:
return True
_________________
return False

A. slow = slow.next; fast = fast.next.next
B. slow.next = slow; fast = fast.next.next
C. slow = slow.next; fast.next = fast.next.next
D. slow = slow.next; fast = fast.next
第4题 中级 2.0分 单选
下列代码用于判断一个数是否为完全数,哪个选项是正确的实现?( )

def isPerfectNumber(n):
if n <= 1:
return False
sum = 1
i = 2
while i * i <= n:
if n % i == 0:
sum += i
_______________
sum += n // i
i += 1
return sum == n

A. if i != n / i:
B. if i != n // i:
C. if i = n // i:
D. if i == n // i:
第5题 中级 2.0分 单选
以下代码计算两个数的最大公约数(GCD),横线上应填写( )。

def gcd(a, b):
if a < b:
a, b = b, a
while b != 0:
temp = a % b
a = b
b = temp
return _________

A. b
B. a
C. temp
D. a+b
第6题 中级 2.0分 单选
下面的代码实现埃拉托斯特尼筛法,横线处应填入( )。

def sieve(n):
is_prime = [True] * (n + 1)
is_prime[0] = is_prime[1] = False
for i in range(2, n + 1):
if is_prime[i]:
for j in range(______, n + 1, i):
is_prime[j] = False
return is_prime

A. i
B. i+1
C. i*2
D. i*i
第7题 中级 2.0分 单选
下面的代码实现线性筛法,横线处应填入( )。

def linearSieve(n):
is_prime = [True] * (n + 1)
primes = []
for i in range(2, n + 1):
if is_prime[i]:
primes.append(i)
for p in primes:
if p * i > n:
break
is_prime[p * i] = False
if _____________:
break
return primes

A. i % p == 0
B. p % i == 0
C. i == p
D. i * p == n
第8题 中级 2.0分 单选
线性筛算法中有语句if p * i > n break; 其目的是( )。
A. 降低常数但复杂度仍是O(n)
B. 保证每个合数只被其最小质因子筛到一次,从而O(n)
C. 提高缓存命中率,复杂度仍O(n)
D. 不重要,是否break都一样
第9题 中级 2.0分 单选
唯一分解定理描述的是( )。
A. 每个整数都能表示为任意素数的乘积
B. 每个大于1的整数能唯一分解为素数幂乘积(忽略顺序)
C. 合数不能分解为素数乘积
D. 素数只有两个因子:1和自身
第10题 中级 2.0分 单选
给定一个n×n的矩阵matrix,返回矩阵中第k小的元素,两处横线上应分别填写( )。

def kthSmallest(matrix, k):
n = len(matrix)
lo = matrix[0][0]
hi = matrix[n-1][n-1]
while lo < hi:
mid = lo + (hi - lo) // 2
if countLE(matrix, mid) >= k:
________
else:
________
return lo

A. hi = mid - 1; lo = mid + 1
B. hi = mid; lo = mid
C. hi = mid; lo = mid + 1
D. hi = mid + 1; lo = mid
第11题 中级 2.0分 单选
下述Python代码实现了快速排序算法,下面说法错误的是( )。
A. 快速排序平均情况下比归并排序的比较、赋值、交换等操作的总数量少
B. 在平均情况下,划分的递归层数为O(log n),每层中的总循环数为O(n)
C. 在最差情况下,递归层数达到O(n),总时间为O(n²)
D. 划分函数中"从右往左查找"与"从左往右查找"的顺序可以互换
第12题 中级 2.0分 单选
下述Python代码实现了归并排序算法,则横线上应填写( )。

def merge(nums, left, mid, right):
tmp = []
i, j = left, mid + 1
while i <= mid and j <= right:
if nums[i] <= nums[j]:
tmp.append(nums[i])
i += 1
else:
tmp.append(nums[j])
j += 1
while i <= mid:
tmp.append(nums[i])
i += 1
while ___________:
tmp.append(nums[j])
j += 1

A. i < mid
B. j < right
C. i <= mid
D. j <= right
第13题 中级 2.0分 单选
给定电影列表,找出最多能安排多少部不重叠的电影,横线上应填写的代码为( )。

def maxMovies(movies):
if not movies:
return 0
movies.sort(key=lambda x: x[1])
count = 1
_____________ = movies[0][1]
for i in range(1, len(movies)):
if movies[i][0] >= lastEnd:
count += 1
lastEnd = movies[i][1]
return count

A. movies
B. lastEnd
C. movies[i][0]
D. movies[i][1]
第14题 中级 2.0分 单选
给定一个整数数组nums,找到一个具有最大和的连续子数组。下面说法错误的是( )。
A. 上述代码采用分治算法实现
B. 本题算法采用贪心算法
C. 时间复杂度:O(n log n)
D. 由于采用递归方式实现,空间复杂度:O(log n)
第15题 中级 2.0分 单选
给定一个由非负整数组成的数组digits,对该整数执行+1操作,横线上应填写( )。

def plusOne(digits):
for i in range(len(digits)-1, -1, -1):
if digits[i] < 9:
digits[i] += 1
return digits
digits[i] = 0
_______________

A. digits.insert(0, 1); return digits
B. digits.insert(1, 0); return digits
C. digits.insert(0, 1)
D. digits.insert(1, 1); return digits
第16题 中级 2.0分 判断
基于下面定义的函数,通过判断isDivisibleBy9(n) == isDigitSumDivisibleBy9(n)代码可验算如果一个数能被9整除,则它的各

T. 正确
F. 错误
第17题 中级 2.0分 判断
假设函数gcd()函数能正确求两个正整数的最大公约数,则下面的findMusicalPattern(4, 6)函数返回2。( )

T. 正确
F. 错误
第18题 中级 2.0分 判断
下面递归实现的斐波那契数列的时间复杂度为O(n)。( )

def fib_memo(n, memo):
if n <= 1:
return n
if memo[n] != -1:
return memo[n]
memo[n] = fib_memo(n - 1, memo) + fib_memo(n - 2, memo)
return memo[n]

T. 正确
F. 错误
第19题 中级 2.0分 判断
链表通过更改指针实现高效的节点插入与删除,但节点访问效率低、占用内存较多。( )
T. 正确
F. 错误
第20题 中级 2.0分 判断
二分查找依赖数据的有序性,通过循环逐步缩减一半搜索区间来进行查找。( )
T. 正确
F. 错误
第21题 中级 2.0分 判断
线性筛关键是"每个合数只会被最小质因子筛到一次",因此为O(n)。( )
T. 正确
F. 错误
第22题 中级 2.0分 判断
快速排序和归并排序都是稳定的排序算法。( )
T. 正确
F. 错误
第23题 中级 2.0分 判断
下面代码采用分治算法求解汉诺塔问题,时间复杂度为O(2^n)。( )

def dfs(n, src, buf, tar):
if n == 1:
move(src, tar)
return
dfs(n - 1, src, tar, buf)
move(src, tar)
dfs(n - 1, buf, src, tar)

T. 正确
F. 错误
第24题 中级 2.0分 判断
所有递归算法都可以转换为迭代算法。( )
T. 正确
F. 错误
第25题 中级 2.0分 判断
贪心算法总能得到全局最优解。( )
T. 正确
F. 错误
第26题 中级 25.0分 编程
数字选取

时间限制:1.0 s
内存限制:512.0 MB
题面描述
给定正整数n,现在有1, 2, ..., n共计n个整数。你需要从这n个整数中选取一些整数,使得所选取的整数中任意两个不同的整数均互质(最大公因数为1)。请你最大化所选取整数的数量。

【输入格式】
一行,一个正整数n。
【输出格式】
一行,一个正整数,表示所选取整数的最大数量。
【样例】
样例输入
6
样例输出
4
数据范围
对于所有测试点,保证1 ≤ n ≤ 10⁶。
第27题 中级 25.0分 编程
有趣的数字和

时间限制:1.0 s
内存限制:512.0 MB
题面描述
如果一个正整数的二进制表示包含奇数个1,那么小A就会认为这个正整数是有趣的。给定正整数l, r,请你统计满足l ≤ i ≤ r的有趣的整数i之和。

【输入格式】
一行,两个正整数l, r。
【输出格式】
一行,一个正整数,表示l到r之间有趣的整数之和。
【样例】
样例输入
3 8
样例输出
19
数据范围
对于所有测试点,保证1 ≤ l ≤ r ≤ 10¹⁸。
💬