2024年9月CCF—GESP(Python六级)编程能力等级认证试卷
六级
2024
2025-02-21 11:39:48
38次
一、单选题
对上题中的二叉搜素树,当输入数组为 [ 5 , 3 , 7 , 2 , 4 , 6 , 8 ] [5,3,7,2,4,6,8][5,3,7,2,4,6,8] 时,构建二叉搜索树,并采用如下代码实现的遍历方式,得到的输出是( )。
def traversal(tree_node* root) :
if (root == nullptr) {
return
}
traversal(root->left)
print(root->val)
print(" ")
traversal(root->right) | A. 5 3 7 2 4 6 8 |
B. 2 3 4 5 6 7 8 |
| C. 2 4 3 6 8 7 5 |
D. 2 4 3 5 6 7 8 |
【知识点】 CCF—GESP Python六级
阅读以下用动态规划解决的0-1背包问题的函数,假设背包的容量 W WW 是10kg,假设输入4个物品的重量 w e i g h t s weightsweights 分别为 1,3,4,6(单位为kg),每个物品对应的价值 v a l u e s valuesvalues 分别为 20,30,50,60,则函数的输出为( )。
def knapsack(capacity, weights, values): dp = [[0 for _ in range(capacity + 1)] for _ in range(len(weights) + 1)] for i in range(1, len(weights) + 1): for j in range(1, capacity + 1): if weights[i - 1] <= j: dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weights[i - 1]] + values[i - 1]) else: dp[i][j] = dp[i - 1][j] return dp[-1][-1] weights = [1, 3, 4,6] values = [20,30,50,60] capacity = 10 print(knapsack(capacity, weights, values))
| A. 90 |
B. 100 |
| C. 110 |
D. 140 |
【知识点】 CCF—GESP Python六级
以下基于二叉树的搜索实现的深度计算函数中横线上应填写( )。
class Node: def __init__(self, data): self.data = data self.left = None self.right = None def height(root): if root is None: return 0 else: left_height = height(root.left) right_height = height(root.right) _________________________________
| A. return max(left_height, right_height) + 1 |
B. return min(left_height, right_height) - 1 |
| C. return min(left_height, right_height) + 1 |
D. return max(left_height, right_height) - 1 |
【知识点】 CCF—GESP Python六级
二叉搜索树中的每个结点,其左子树的所有结点值都小于该结点值,右子树的所有结点值都大于该结点值。以下代码对给定的整数数组(假设数组中没有数值相等的元素),构造一个对应的二叉搜索树,横线上应填写():
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def isValidBST(self, root: TreeNode) -> bool:
def helper(node, min_val, max_val):
if not node:
return True
————————————————————————————————————————————————
return False
return helper(node.left, min_val, node.val) and helper(node.right,node.val, max_val)
return helper(root, float('-inf'), float('inf')) | A. if node.val <= min_val or node.val >= max_val: |
B. if node.val >= min_val or node.val >= max_val: |
| C. if node.val <= min_val or node.val <= max_val: |
D. if node.val >= min_val or node.val <= max_val: |
【知识点】 CCF—GESP Python六级
采用如下代码实现检查输入的字符串括号是否匹配,横线上应填入的代码为( )。
class Stack:
def __init__(self):
self.items = []
def is_empty(self):
return not self.items
def push(self, item):
self.items.append(item)
def pop(self):
if not self.is_empty():
return self.items.pop()
def peek(self):
if not self.is_empty():
return self.items[-1]
def size(self):
return len(self.items)
def paren_match(expr):
s = Stack()
balanced = True
index = 0
while index < len(expr) and balanced:
symbol = expr[index]
if symbol in '([{':
________________
else:
if s.is_empty():
balanced = False
else:
top = s.pop()
if not matches(top, symbol):
balanced = False
index += 1
if balanced and s.is_empty():
return True
else:
return False
def matches(opening, closing):
opens = '([{'
closers = ')]}'
return opening in opens and closers.index(closing) == opens.index(opening) | A. s.push(symbol) |
B. s.pop(symbol) |
| C. s.push(index) |
D. s.pop(index) |
【知识点】 CCF—GESP Python六级
以下Python代码实现 n 位的格雷码,则横线上应填写( )。
def generate_gray_code(n): if n <= 0: return [] if n == 1: return [0, 1] gray_code = generate_gray_code(n - 1) ———————————————————————————————————————— for x in gray_code] return gray_code + inverted_gray_code
| A. inverted_gray_code = [int((‘0’ * n + bin(x)[2:])[-n:], 2) |
B. inverted_gray_code = [int((‘1’ * n + bin(x)[2:])[-n:], 2) |
| C. inverted_gray_code = [int((‘1’ * n + bin(x)[1:])[-n:], 2) |
D. inverted_gray_code = [int((‘1’ * n + bin(x)[2:])[n:], 2) |
【知识点】 CCF—GESP Python六级
二叉树的深度定义为从根结点到叶结点的最长路径上的结点数,则以下基于二叉树的深度优先搜索实现的深度计算函数中横线上应填写( )。
class Node: def __init__(self, data): self.data = data self.left = None self.right = None def max_depth(root_node): if root_node is None: return 0 else: left_depth = max_depth(root_node.left) right_depth = max_depth(root_node.right) _______________________________________
| A. return max(left_depth, right_depth) |
B. return min(left_depth, right_depth) + 1 |
| C. return max(left_depth, right_depth) + 1 |
D. return max(left_depth, right_depth) - 1 |
【知识点】 CCF—GESP Python六级
下面代码判断队列的第一个元素是否等于 a,并删除该元素,横向上应填写( )。
import queue
q = queue.Queue()
a = 'a'
if ________________________________________
q.get()
print('元素 {} 是队列的第一个元素,并已被移除。'.format(a))
else:
print('队列的第一个元素不是 {}.'.format(a)) | A. not q.empty() and q.queue[0] != a: |
B. not q.empty() and q.queue[0] == a: |
| C. q.empty() and q.queue[0] == a: |
D. q.empty() and q.queue[0] != a: |
【知识点】 CCF—GESP Python六级
二、判断题
运行以下python代码,屏幕将输出“derived class”。
class BaseClass:
def my_method(self):
print("base class")
class DerivedClass(BaseClass):
def my_method(self):
print("derived class")
derived_instance = DerivedClass()
derived_instance.my_method() | A.正确 | B.错误 |
【知识点】 CCF—GESP Python六级
三、编程题
算法学习
时间限制:1.0 s
内存限制:512.0 MB
题面描述
小杨计划学习m种算法,为此他找了n道题目来帮助自己学习,每道题目至多学习一次。
小杨对于m种算法的初始掌握程度均为 0。第i道题目有对应的知识点ai即学习第i道题目可以令小杨对第ai种算法的掌握程度提高bi。小杨的学习目标是对m种算法的掌握程度均至少为k 。
小杨认为连续学习两道相同知识点的题目是不好的,小杨想请你编写程序帮他计算出他最少需要学习多少道题目才能使得他在完成学习目标的同时避免连续学习两道相同知识点的题目。
输入格式
第一行三个正整数m,n,k,代表算法种类数,题目数和目标掌握程度。
第二行n个正整数a1,a2,a3,...,an,代表每道题目的知识点。
第二行n个正整数b1,b2,b3,...,bn,代表每道题目提升的掌握程度。
输出格式
输出一个整数,代表小杨最少需要学习题目的数量,如果不存在满足条件的方案,输出 -1。
输入样例1
3 5 10 1 1 2 3 3 9 1 10 10 1
输出样例1
4
输入样例2
2 4 10 1 1 1 2 1 2 7 10
输出样例2
-1
对于样例1,一种最优学习顺序为第一道题,第三道题,第四道题,第二道题。

对于全部数据,保证有1≤m,n≤105,1≤bi,k≤105,1≤ai≤m。
【知识点】 CCF—GESP Python六级

