GESP2025年03月Python六级试卷

从PDF导入:GESP2025年03月Python六级试卷

Python 180分钟 总分 100.0 27 题
试卷题目预览
第1题 中级 2.0分 单选
在面向对象编程中,类是一种重要的概念。下面关于类的描述中,不正确的是( )。
A. 类是一个抽象的概念,用于描述具有相同属性和行为的对象集合
B. 类可以包含属性和方法,属性用于描述对象的状态,方法用于描述对象的行为
C. 类可以被实例化,生成具体的对象
D. 类一旦定义后,其属性和方法不能被修改或扩展
第2题 中级 2.0分 单选
哈夫曼编码是一种用于数据压缩的算法。以下关于哈夫曼编码的描述中,不正确的是( )。
A. 哈夫曼编码是一种变长编码,频率高的字符使用较短的编码,频率低的字符使用较长的编码
B. 在构造哈夫曼树时,频率越低的字符离根节点越近,频率越高的字符离根节点越远
C. 哈夫曼编码的生成过程基于贪心算法,每次选择频率最低的两个节点进行合并
D. 哈夫曼编码是一种前缀编码,任何一个字符的编码都不会是另一个字符编码的前缀,因此可以实现唯一解码
第3题 中级 2.0分 单选
以下代码实现了树的哪种遍历方式?

class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def traverse(root):
if root is None:
return
print(root.val, end=" ")
traverse(root.left)
traverse(root.right)

A. 前序遍历
B. 中序遍历
C. 后序遍历
D. 层次遍历
第4题 中级 2.0分 单选
以下关于完全二叉树的代码描述,正确的是( )。

from collections import deque
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def is_complete_tree(root):
if root is None:
return True
q = deque()
q.append(root)
has_null = False
while q:
node = q.popleft()
if node is None:
has_null = True
else:
if has_null:
return False
q.append(node.left)
q.append(node.right)
return True

A. 该代码用于判断一棵树是否为满二叉树
B. 该代码用于判断一棵树是否为完全二叉树
C. 该代码用于判断一棵树是否为二叉搜索树
D. 该代码用于计算树的高度
第5题 中级 2.0分 单选
以下代码实现了二叉排序树的哪种操作?

class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def op(root, val):
if root is None:
return TreeNode(val)
if val < root.val:
root.left = op(root.left, val)
else:
root.right = op(root.right, val)
return root

A. 查找
B. 插入
C. 删除
D. 遍历
第6题 中级 2.0分 单选
给定字符集{A, B, C, D}的出现频率分别为{5, 1, 6, 2},则正确的哈夫曼编码是( )。
A. A: 0, B: 100, C: 11, D: 101
B. A: 11, B: 100, C: 0, D: 101
C. A: 0, B: 101, C: 11, D: 100
D. A: 10, B: 101, C: 0, D: 100
第7题 中级 2.0分 单选
关于动态规划的描述,正确的是( )。
A. 动态规划算法的时间复杂度总是低于贪心算法
B. 动态规划要求问题必须具有最优子结构和重叠子问题两个性质
C. 动态规划通过递归实现时不需要存储中间结果
D. 动态规划的核心思想是将问题分解为互不重叠的子问题
第8题 中级 2.0分 单选
以下代码中,类的构造函数被调用了( )次。

import copy
class MyClass:
def __init__(self):
print("Constructor called!")
if __name__ == "__main__":
obj1 = MyClass()
obj2 = copy.deepcopy(obj1)

A. 1
B. 2
C. 3
D. 0
第9题 中级 2.0分 单选
以下代码中function1()实现了循环队列的哪种操作?

class CircularQueue:
def __init__(self, k):
self.size = k
self.arr = [0] * k
self.front = -1
self.rear = -1
def is_full(self):
return (self.rear + 1) % self.size == self.front
def is_empty(self):
return self.front == -1
def function1(self, value):
if self.is_full():
return False
if self.is_empty():
self.front = 0
self.rear = (self.rear + 1) % self.size
self.arr[self.rear] = value
return True

A. 入队
B. 出队
C. 查看队首元素
D. 判断队列是否为空
第10题 中级 2.0分 单选
以下代码实现了二叉树的深度优先搜索(DFS),并统计了叶子节点的数量。横线上应填写( )。

class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def count_leaf_nodes(root):
if root is None:
return 0
stack = []
stack.append(root)
count = 0
while stack:
node = stack.pop()
if node.left is None and node.right is None:
count += 1
if node.right:
stack.append(node.right)
if node.left:
_______________________

A. stack.append(node.left)
B. stack.append(node.right)
C. stack.delete(node.left)
D. stack.delete(node.right)
第11题 中级 2.0分 单选
以下代码实现了二叉树的广度优先搜索(BFS),并查找特定值的节点。横线上应填写( )。

from collections import deque
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def find_node(root, target):
if root is None:
return None
q = deque()
q.append(root)
while q:
current = q.popleft()
if current.val == target:
return current
__________________
if current.left:
q.append(current.right)
if current.right:
q.append(current.left)
if current.left:
q.append(current.left)
if current.right:
q.append(current.right)
if current.left:
q.append(current)
if current.right:
q.append(current.right)
if current.left:
q.append(current.left)
if current.right:
q.append(current)

第12题 中级 2.0分 单选
以下代码用于生成n位格雷编码。横线上应填写( )。

def generate_gray_code(n):
if n == 0:
return ["0"]
if n == 1:
return ["0", "1"]
prev = generate_gray_code(n - 1)
result = ["0" + s for s in prev]
__________________________________
return result

A. result += ["1" + s for s in reversed(prev)]
B. result += ["0" + s for s in reversed(prev)]
C. result += ["1" + s for s in reversed(1)]
D. result += ["1" + s for s in reversed(0)]
第13题 中级 2.0分 单选
以下代码实现了0/1背包问题的动态规划解法。假设物品重量为weights[],价值为values[],背包容量为W,横线上应填写( )。

def knapsack(W, weights, values):
n = len(weights)
dp = [[0] * (W + 1) for _ in range(n + 1)]
for i in range(1, n + 1):
for j in range(1, W + 1):
if weights[i - 1] > j:
dp[i][j] = dp[i - 1][j]
else:
dp[i][j] = max(__________________________________)
return dp[n][W]

A. dp[i][j], dp[i - 1][j - weights[i - 1]] + values[i - 1]
B. dp[i - 1][j], dp[i][j - weights[i - 1]] + values[i - 1]
C. dp[i - 1][j], dp[i - 1][j - weights[i - 1]] + values[i - 1]
D. dp[i - 1][j], dp[i - 1][j - weights[i]] + values[i]
第14题 中级 2.0分 单选
以下代码用于检查字符串中的括号是否匹配,横线上应填写( )。

def is_balanced(s):
stack = []
for c in s:
if c in '([{:
stack.append(c)
else:
if not stack:
return False
top = stack.pop()
if (c == ')' and top != '(') or \
(c == ']' and top != '[') or \
(c == '}' and top != '{'):
return False
__________________

A. True
B. False
C. return stack
D. return not stack
第15题 中级 2.0分 单选
给定一个二叉排序树(BST),其中节点的值均为正整数。以下关于BST的说法中,错误的是( )。
A. 对BST进行中序遍历,得到的序列一定是有序的
B. 在BST中查找一个值为k的节点,最坏情况下需要遍历整棵树
C. 向BST中插入一个新节点,可能会破坏BST的平衡性
D. 删除BST中的一个节点后,树的高度一定不会增加
第16题 中级 2.0分 判断
哈夫曼树在构造过程中,每次合并权值最小的两个节点,最终生成的树带权路径和最小。( )
T. 正确
F. 错误
第17题 中级 2.0分 判断
格雷编码的相邻两个编码之间必须有多位不同,以避免数据传输错误。( )
T. 正确
F. 错误
第18题 中级 2.0分 判断
在树的深度优先搜索(DFS)中,使用队列作为辅助数据结构以实现"先进后出"的访问顺序。( )
T. 正确
F. 错误
第19题 中级 2.0分 判断
以下代码实现的是二叉树的中序遍历:( )

class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def traverse(root):
if root is None:
return
traverse(root.left)
print(root.val, end=" ")
traverse(root.right)

T. 正确
F. 错误
第20题 中级 2.0分 判断
Python可以直接定义多个构造函数,但默认无参数的构造函数只能有一个。( )
T. 正确
F. 错误
第21题 中级 2.0分 判断
二叉排序树(BST)中,若某节点的左子树为空,则该节点一定是树中的最小值节点。( )
T. 正确
F. 错误
第22题 中级 2.0分 判断
在动态规划解决一维硬币找零问题时,若硬币面额为[1, 3, 4],目标金额为6,则最少需要2枚硬币(3+3)。( )
T. 正确
F. 错误
第23题 中级 2.0分 判断
面向对象编程中,封装是指将数据和行为绑定在一起,并对外隐藏实现细节。( )
T. 正确
F. 错误
第24题 中级 2.0分 判断
以下代码创建的树是一棵完全二叉树:( )

class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)

T. 正确
F. 错误
第25题 中级 2.0分 判断
栈和队列均可以用双向链表实现,插入和删除操作的时间复杂度为O(1)。( )
T. 正确
F. 错误
第26题 中级 25.0分 编程
树上漫步

时间限制:3.0 s 内存限制:512.0 MB
题目描述:小A有一棵n个结点的树,这些结点依次以1~n标号。小A想在这棵树上漫步。具体来说,小A会从树上的某个结点出发,每一步可以移动到与当前结点相邻的结点,并且小A只会在偶数步(可以是零步)后结束漫步。
现在小A想知道,对于树上的每个结点,从这个结点出发开始漫步,经过偶数步能结束漫步的结点有多少个(可以经过重复的节点)。

【输入格式】
第一行,一个正整数n。接下来n-1行,每行两个整数x,y,表示树上有一条连接结点x和结点y的边。
【输出格式】
一行,n个整数,第i个整数表示从结点i出发开始漫步,能结束漫步的结点数量。
【样例】
样例输入:
4
1 3
2 3
4 3
样例输出:
2 2 2 1
第27题 中级 25.0分 编程
环线

时间限制:3.0 s 内存限制:512.0 MB
题目描述:小A喜欢坐地铁。地铁环线有n个车站,依次以1~n标号。车站i(1≤i小A会从某个车站出发,乘坐地铁环线到某个车站结束行程,这意味着小A至少会经过一个车站。小A不会经过一个车站多次。当小A乘坐地铁环线经过车站i时,小A会获得a_i点快乐值。请你安排小A的行程,选择出发车站与结束车站,使得获得的快乐值总和最大。

【输入格式】
第一行,一个正整数n,表示车站的数量。第二行,n个整数a_1~a_n,分别表示经过每个车站时获得的快乐值。
【输出格式】
一行,一个整数,表示小A能获得的最大快乐值。
【样例】
样例输入:
4
-1 2 3 0
样例输出:
5
💬