2025年3月CCF—GESP(Python七级)编程能力等级认证试卷
七级
2025
2025-06-20 10:12:37
86次
一、单选题
给定一个整数数组 nums,找到其中最长的严格上升子序列的长度。
子序列是指从原数组中删除一些元素(或不删除)后,剩余元素保持原有顺序的序列。
要求:
子序列必须是严格上升的(即每个元素都比前一个元素大)。
返回最长严格上升子序列的长度。
横线处应该填写的是()
def length_of_lis(nums): if not nums: return 0 dp = [1] * len(nums) for i in range(1, len(nums)): for j in range(i): if nums[j] < nums[i]: ________________ return max(dp)
| A. dp[i] = max(dp[i], dp[j]) |
B. dp[i] = max(dp[i], dp[j] + 1) |
| C. dp[i] = max(dp[i]+1, dp[j] + 1) |
D. dp[i] = max(dp[i]+1, dp[j]) |
【知识点】 CCF—GESP Python七级
以下代码的功能是什么?
def fuction1(text1, text2): m, n = len(text1), len(text2) dp = [[0] * (n + 1) for _ in range(m + 1)] for i in range(1, m + 1): for j in range(1, n + 1): if text1[i - 1] == text2[j - 1]: dp[i][j] = dp[i - 1][j - 1] + 1 else: dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) return dp[m][n]
| A. 计算两个字符串的最长公共子序列 |
B. 计算两个字符串的最长公共子串 |
| C. 计算两个字符串的最长公共前缀 |
D. 计算两个字符串的最长公共后缀 |
【知识点】 CCF—GESP Python七级
以下代码的功能是什么?
def knapsack(weights, values, capacity): n = len(weights) dp = [[0] * (capacity + 1) for _ in range(n + 1)] for i in range(1, n + 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[n][capacity]
| A. 计算背包问题的最小价值 |
B. 计算背包问题的最大价值 |
| C. 计算背包问题的最小重量 |
D. 计算背包问题的最大重量 |
【知识点】 CCF—GESP Python七级
给定一个无向图,图的节点编号从 0 到 n-1,图的边以邻接表的形式给出。编写的一个python程序,使用深度优先搜索(DFS)遍历该图,并输出遍历的节点顺序。
下面程序中横线处应该填写的是()
def dfs(graph, start, visited=None):
if visited is None:
visited = set()
visited.add(start)
print(start, end=" ")
for neighbor in graph[start]:
if neighbor not in visited:
________________
graph = {
0: [1, 2],
1: [0, 3, 4],
2: [0, 5],
3: [1],
4: [1, 5],
5: [2, 4]
}
print("DFS 遍历顺序:")
dfs(graph, 0) | A. dfs(graph, neighbor, visited) |
B. dfs(graph+1, neighbor, visited) |
| C. dfs(graph, neighbor) |
D. dfs(graph+1, visited) |
【知识点】 CCF—GESP Python七级
以下代码的功能是什么?
def coin_change(coins, amount):
dp = [float('inf')] * (amount + 1)
dp[0] = 0
for coin in coins:
for i in range(coin, amount + 1):
dp[i] = min(dp[i], dp[i - coin] + 1)
return dp[amount] if dp[amount] != float('inf') else -1 | A. 计算硬币的组合数 |
B. 计算硬币的最小数量,使得总金额等于目标金额 |
| C. 计算硬币的最大数量,使得总金额等于目标金额 |
D. 计算硬币的总金额 |
【知识点】 CCF—GESP Python七级
以下代码的功能是什么?
def unique_paths(m, n): dp = [[1] * n for _ in range(m)] for i in range(1, m): for j in range(1, n): dp[i][j] = dp[i - 1][j] + dp[i][j - 1] return dp[m - 1][n - 1]
| A. 计算从左上角到右下角的唯一路径数 |
B. 计算从左上角到右下角的最短路径 |
| C. 计算从左上角到右下角的最长路径 |
D. 计算从左上角到右下角的最小路径 |
【知识点】 CCF—GESP Python七级
二、判断题
三、编程题
图上移动
题目描述
小 A 有一张包含n 个结点与 m条边的无向图,结点以1,2,...,n 标号。小 A 会从图上选择一个结点作为起点,每一步移动到某个与当前小 A 所在结点相邻的结点。对于每个结点 i(1≤i≤n ),小 A 想知道从结点i 出发恰好移动1,2,...,k步之后,小 A 可能位于哪些结点。由于满足条件的结点可能有很多,你只需要求出这些结点的数量。
输入格式
第一行,三个正整数 n,m,k,分别表示无向图的结点数与边数,最多移动的步数。
接下来m 行,每行两个正整数 ui,vi,表示图中的一条连接结点 ui与vi 的无向边。
输出格式
共n 行,第 i行(1≤i≤n )包含 k个整数,第j 个整数(1≤j≤k )表示从结点 i出发恰好移动j 步之后可能位于的结点数量。
输入样例
4 4 3 1 2 1 3 2 3 3 4
输出样例
2 4 4 2 4 4 3 3 4 1 3 3
数据范围
对于20 % 的测试点,保证k=1 。
对于另外20 % 的测试点,保证 1≤n≤50,1≤m≤50 。
对于所有测试点,保证 1≤n≤500,1≤m≤500 ,1≤k≤20 ,1≤ui,vi≤n。
【知识点】 CCF—GESP Python七级
等价消除
题目描述
小 A 有一个仅包含小写英文字母的字符串 S。
对于一个字符串,如果能通过每次删去其中两个相同字符的方式,将这个字符串变为空串,那么称这个字符串是可以被等价消除的。
小 A 想知道 S有多少子串是可以被等价消除的。
一个字符串 S'是S 的子串,当且仅当删去 S的某个可以为空的前缀和某个可以为空的后缀之后,可以得到 S'。
输入格式
第一行,一个正整数|S| ,表示字符串S 的长度。
第二行,一个仅包含小写英文字母的字符串 S。
输出格式
一行,一个整数,表示答案。
输入样例 1
7 aaaaabb
输出样例 1
9
输入样例 2
9 babacabab
输出样例 2
2
数据范围
对于20 % 的测试点,保证S 中仅包含 a 和 b 两种字符。
对于另外20 % 的测试点,保证 1≤|S|≤2000。
对于所有测试点,保证 1≤|S|≤2*105 。
【知识点】 CCF—GESP Python七级
