2025年3月CCF—GESP(Python六级)编程能力等级认证试卷
六级
2025
2025-06-20 09:33:12
35次
一、单选题
以下代码用于生成 位格雷编码。横线上应填写( )。
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)] |
【知识点】 CCF—GESP Python六级
以下代码实现了二叉排序树的哪种操作?
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. 遍历 |
【知识点】 CCF—GESP Python六级
以下关于完全二叉树的代码描述,正确的是( )。
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. 该代码用于计算树的高度 |
【知识点】 CCF—GESP Python六级
以下代码实现了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] |
【知识点】 CCF—GESP Python六级
以下代码用于检查字符串中的括号是否匹配,横线上应填写( )。
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 |
【知识点】 CCF—GESP Python六级
以下代码实现了二叉树的深度优先搜索(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: _______________________ return count
| A. stack.append(node.left) |
B. stack.append(node.right) |
| C. stack.delete(node.left) |
D. stack.delete(node.right) |
【知识点】 CCF—GESP Python六级
以下代码中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 fuction1(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. 判断队列是否为空 |
【知识点】 CCF—GESP Python六级
以下代码实现了树的哪种遍历方式?
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. 层次遍历 |
【知识点】 CCF—GESP Python六级
以下代码实现了二叉树的广度优先搜索(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 __________________ return None
A.if current.left: q.append(current.right) if current.right: q.append(current.left) |
B.if current.left: q.append(current.left) if current.right: q.append(current.right) |
C.if current.left: q.append(current) if current.right: q.append(current.right) |
D.if current.left: q.append(current.left) if current.right: q.append(current) |
【知识点】 CCF—GESP Python六级
二、判断题
以下代码实现的是二叉树的中序遍历:
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)
| A.正确 | B.错误 |
【知识点】 CCF—GESP Python六级
以下代码创建的树是一棵完全二叉树:
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)
| A.正确 | B.错误 |
【知识点】 CCF—GESP Python六级
三、编程题
环线
题目描述
小 A 喜欢坐地铁。地铁环线有 n个车站,依次以 1,2,...,n标号。车站 i( 1≤i<n)的下一个车站是车站i+1 。
特殊地,车站n 的下一个车站是车站1 。
小 A 会从某个车站出发,乘坐地铁环线到某个车站结束行程,这意味着小 A 至少会经过一个车站。小 A 不会经过一个车站多次。当小 A 乘坐地铁环线经过车站 i时,小 A 会获得 ai点快乐值。请你安排小 A 的行程,选择出发车站与结束车站,使得获得的快乐值总和最大。
输入格式
第一行,一个正整数n ,表示车站的数量。
第二行, n个整数a1,a2,...an, ,分别表示经过每个车站时获得的快乐值。
输出格式
一行,一个整数,表示小 A 能获得的最大快乐值。
输入样例 1
4 -1 2 3 0
输出样例 1
5
输入样例 2
5 -3 4 -5 1 3
输出样例 2
5
数据范围
对于20% 的测试点,保证1≤n≤200 。
对于40 % 的测试点,保证 1≤n≤2000。
对于所有测试点,保证 1≤n≤2*105,-109≤ai≤109 。
【知识点】 CCF—GESP Python六级
树上漫步
题目描述
小 A 有一棵 n个结点的树,这些结点依次以 1,2,...,n标号。
小 A 想在这棵树上漫步。具体来说,小 A 会从树上的某个结点出发,每一步可以移动到与当前结点相邻的结点,并且小 A 只会在偶数步(可以是零步)后结束漫步。
现在小 A 想知道,对于树上的每个结点,从这个结点出发开始漫步,经过偶数步能结束漫步的结点有多少个(可以经过重复的节点)。
输入格式
第一行,一个正整数n 。
接下来n-1 行,每行两个整数ui,vi ,表示树上有一条连接结点ui 和结点vi 的边。
输出格式
一行, n个整数,第 i个整数表示从结点i 出发开始漫步,能结束漫步的结点数量。
输入样例 1
3 1 3 2 3
输出样例 1
2 2 1
输入样例 2
4 1 3 3 2 4 3
输出样例 2
3 3 1 3
数据范围
对于40 % 的测试点,保证1≤n≤103 。
对于所有测试点,保证1≤n≤2*105 。
【知识点】 CCF—GESP Python六级
