GESP2025年12月Python五级试卷

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

Python 180分钟 总分 100.0 27 题
试卷题目预览
第1题 中级 2.0分 单选
对如下定义的循环单链表,横线处填写( )。

def print_list(head):
_______________________________
while True:
print(p.data, end=" ")
p = p.next
if p == head:
break
print()

A. if head is None: return; p.next = head
B. if head is None: return; p = head.next
C. if head is None: return; p = head
D. if head.next is None: return; p = head
第2题 中级 2.0分 单选
区块链技术中,下面代码实现插入区块添加函数,横线处填写( )。
A. new_block = Block(self.tail.index, data, self.data)
B. new_block = Block(self.tail.index + 1, data, self.tail); self.tail = new_block
C. new_block = Block(self.tail.index, data+1, self.data); self.tail = new_block
D. new_block = Block(self.tail.index, data, self.tail); self.tail.data = new_block
第3题 中级 2.0分 单选
下面关于单链表和双链表的描述中,正确的是( )。
A. 双链表删除指定节点是O(1),单链表是O(n)
B. 双链表删除指定节点是O(n),单链表是O(1)
C. 双链表删除指定节点是O(1),单链表是O(1)
D. 双链表删除指定节点是O(n),单链表是O(n)
第4题 中级 2.0分 单选
假设我们有两个数x和y,它们对模m同余。如果x=7,m=3,以下哪个值不可能是y?( )
A. 3
B. 4
C. 6
D. 9
第5题 中级 2.0分 单选
下面代码实现了欧几里得算法,下面有关说法,错误的是( )。

def gcd1(a, b):
return a if b == 0 else gcd1(b, a % b)
def gcd2(a, b):
while b != 0:
temp = b
b = a % b
a = temp
return a

A. gcd1()实现为递归方式
B. gcd2()实现为迭代方式
C. 当n较大时,gcd1()实现会多次调用自身,需要较多额外的辅助空间
D. 当n较大时,gcd1()的实现比gcd2()执行效率更高
第6题 中级 2.0分 单选
唯一分解定理描述的内容是( )。
A. 任何正整数都可以表示为两个素数的和
B. 任何大于1的合数都可以唯一分解为有限个质数的乘积
C. 两个正整数的最大公约数总是等于它们的最小公倍数除以它们的乘积
D. 所有素数都是奇数
第7题 中级 2.0分 单选
下述代码实现素数表的线性筛法,横线上应填的代码是( )。

def linear_sieve(n):
is_prime = [True] * (n + 1)
primes = []
for i in range(2, n + 1):
if is_prime[i]:
primes.append(i)
for j in range(len(primes)):
p = primes[j]
if i * p > n:
break
——————————————————————————
if i % p == 0:
break
return primes

A. is_prime[i * p] = False
B. is_prime[i] = False
C. is_prime[i * p] = True
D. is_prime[i + p] = False
第8题 中级 2.0分 单选
下列关于排序的说法,正确的是( )。
A. 快速排序是稳定排序
B. 归并排序通常是稳定的
C. 插入排序是不稳定排序
D. 冒泡排序不是原地排序
第9题 中级 2.0分 单选
下面代码实现了归并排序。下述说法中,不正确的是( )。
A. 归并排序的平均复杂度是O(n log n)
B. 归并排序需要O(n)的额外空间
C. 归并排序在最坏情况的时间复杂度是O(n log n)
D. 归并排序适合大规模数据
第10题 中级 2.0分 单选
下述Python代码实现了快速排序算法,最差情况时间复杂度是( )。
A. O(n)
B. O(n log n)
C. O(n²)
D. O(log n)
第11题 中级 2.0分 单选
下面代码在有序数组中查找第一个大于等于x的元素位置,以下说法正确的是( )。

def lower_bound(arr, x):
l = 0
r = len(arr)
while l < r:
mid = l + (r - l) // 2
if arr[mid] >= x:
r = mid
else:
l = mid + 1
return l

A. 上述代码逻辑正确
B. 上述代码逻辑错误,while循环条件应该用l <= r
C. 上述代码逻辑错误,mid计算错误
D. 上述代码逻辑错误,边界条件不对
第12题 中级 2.0分 单选
小杨要把长度为L的木头切成K段,用二分法找到满足条件的最小x,横线处应填写( )。
A. mid = l + (r - l) // 2; if check(L, K, mid): r = mid; else: l = mid + 1
B. mid = l + (r) // 2; if check(L, K, mid+1): r = mid; else: l = mid + 1
C. mid = l + (r - l) // 2; if check(L+1, K, mid): r = mid; else: l = mid + 1
D. mid = l + (r - l) // 2; if check(L+1, K, mid): r = mid; else: l = mid
第13题 中级 2.0分 单选
根据下面代码,以下说法正确的是( )。

def factorial1(n):
if n <= 1:
return 1
return n * factorial1(n - 1)
def factorial2(n):
result = 1
while n > 1:
result *= n
n -= 1
return result

A. 上面两种实现方式的时间复杂度相同,都为O(n)
B. 上面两种实现方式空间复杂度相同,都为O(n)
C. 函数factorial1()的时间复杂度为O(n),函数factorial2()的时间复杂度为O(1)
D. 上面两种实现方式空间复杂度相同,都为O(1)
第14题 中级 2.0分 单选
给定n个任务,每个任务有截止时间和利润,为了获得最大利润,横线处应填写( )。
A. slot[t] = True; total_profit += task.profit; break
B. slot[t] = True; total_profit += task.profit
C. slot[t] = False; total_profit += task.profit; break
D. slot[t] = True; total_profit -= task.profit
第15题 中级 2.0分 单选
下面代码实现了高精度加法,横线上应填写( )。

def add(a, b):
c = []
carry = 0
i = 0
while i < len(a) or i < len(b):
if i < len(a):
carry += a[i]
if i < len(b):
carry += b[i]
____________________
i += 1
if carry:
c.append(carry)
return c

A. c.append(carry % 10)
B. c.append(carry % 10); carry = carry // 10
C. carry = carry // 10
D. c.append(carry // 10); carry = carry % 10
第16题 中级 2.0分 判断
数组和链表都是线性表。链表的优点是插入删除不需要移动元素,并且能随机查找。( )
T. 正确
F. 错误
第17题 中级 2.0分 判断
下面的lcm(a, b)函数能正确找到两个正整数的最小公倍数。( )
T. 正确
F. 错误
第18题 中级 2.0分 判断
在单链表中,若想在O(1)时间复杂度内删除节点p(非尾节点),可用后继节点的值覆盖p。( )
T. 正确
F. 错误
第19题 中级 2.0分 判断
线性筛法的时间复杂度为O(n),低于埃氏筛法的O(n log log n)。( )
T. 正确
F. 错误
第20题 中级 2.0分 判断
二分查找仅适用于有序数据。( )
T. 正确
F. 错误
第21题 中级 2.0分 判断
快速排序通过三数取中选择枢轴,可降低落入最坏情况的概率。( )
T. 正确
F. 错误
第22题 中级 2.0分 判断
贪心算法每步做出局部最优选择不再回溯;分治算法将问题分解为子问题求解。( )
T. 正确
F. 错误
第23题 中级 2.0分 判断
以下fib函数计算第n项斐波那契数,其时间复杂度为O(n)。( )

def fib(n):
if n <= 1:
return n
return fib(n - 1) + fib(n - 2)

T. 正确
F. 错误
第24题 中级 2.0分 判断
递归函数一定要有终止条件,否则可能会造成栈溢出。( )
T. 正确
F. 错误
第25题 中级 2.0分 判断
使用贪心算法解决问题时,最终一定能找到全局最优解。( )
T. 正确
F. 错误
第26题 中级 25.0分 编程
数字移动

时间限制:3.0 s
内存限制:512.0 MB
题面描述
小A有一个包含n个正整数的序列a,序列a恰好包含n/2对不同的正整数。小A希望每对相同的数字在序列中相邻,每次操作选择任意i,将当前序列的第i个数字移动到任意位置,并花费对应数字的体力。小A希望计算一个最小的x,使得他能在每次花费体力均不超过x的情况下令每对相同数字相邻。

【输入格式】
第一行一个正整数n。第二行包含n个正整数ai。
【输出格式】
输出一行,代表满足要求的x的最小值。
【样例】
样例输入
6
1 2 1 3 2 3
样例输出
2
数据范围
对于所有测试点,保证2 ≤ n ≤ 2×10⁵。
第27题 中级 25.0分 编程
相等序列

时间限制:3.0 s
内存限制:512.0 MB
题面描述
小A有一个包含n个正整数的序列a。小A每次可以花费1个金币执行操作:选择一个正整数ai,将ai变为ai*p或ai/p(p为任意质数)。小A想计算出令序列中所有整数都相同,最少需要花费多少金币。

【输入格式】
第一行一个正整数n。第二行包含n个正整数ai。
【输出格式】
输出一行,代表最少需要花费的金币数量。
【样例】
样例输入
5
10 6 35 105 42
样例输出
8
数据范围
对于所有测试点,保证2 ≤ n ≤ 10⁵。
💬