2024计算机能力挑战赛模拟试题 + 两道真题
1

正确答案:B
分析:
A. pyserial 是用于串行通信的库,通常用于与串口设备通信,而不是处理图像。
C. openpyxl 是用于读写Excel文件的库,与网络爬虫无关。
D. scrapy 是一个流行的网络爬虫和网页抓取框架,用于从网站抓取数据,而不是数据分析。
2

正确答案:A
分析:
A. 正确。在Python中,当函数被调用时,实参的值会被传递给函数的形参。对于不可变对象,如整数和字符串,这是按值传递,复制了引用;对于可变对象,如列表和字典,传递的是引用。
B. 错误。Python函数中的可选参数(即带默认值的参数)必须定义在非可选参数(不带默认值的参数)之后。
C. 错误。全局变量和局部变量可以同名,但在函数内部,使用同名变量时默认是局部变量,除非用global关键字指定使用全局变量。
D. 错误。局部变量在函数调用结束时会被销毁,每次函数调用都会创建新的局部变量实例。
3
正确答案:A
分析:
以上代码⇔
for m in '花草':
for n in '虫鱼':
print(m + n)
7

正确答案:C
8

正确答案:D
A. 这个描述有些误导。在递归函数中,函数确实需要调用自己来执行递归操作,但不是直接使用函数名作为返回值。通常,递归函数会在某个条件下返回一个具体的值或调用结果,例如 return some_function(arguments)。所以,A选项表述不准确。
B. Python中, return 并不是必须的;如果函数没有返回值或者不写 return 语句,默认返回 None。因此,B选项的描述也是不准确的。
C. 参数的值是否改变与函数中对变量的操作有关,与参数类型无关
这个描述不完全正确。在Python中,函数参数的行为既取决于其类型(可变类型还是不可变类型),也取决于函数内部对这些参数的操作。例如,如果向函数传递了一个列表(一个可变类型),并在函数内部修改了列表,那么原始列表也会被修改。但如果传递的是一个整数(不可变类型),即使在函数内部改变了这个整数的值,原始的整数也不会改变。因此,C选项不准确。
11

正确答案:C
C. plt.subplot(1022)
这个命令意图在解释为三个数字:10行、2列、第2个子图,这是一个非法的命令。正常情况下,单个三位数的 subplot 代码应该只包含最多三位数字,表示的行和列数也应该是合理的。在这种格式下,Python 解释器可能会试图将其拆解为1行0列的第22个子图,显然是不合理的,因为列数不能为零,子图索引也超出了可能的最大值。
12

正确的答案是:B
C. CSV文件中必须用Unicode编码书写方式
错误。CSV文件不必须使用Unicode编码。它们通常使用任何适合的编码,如UTF-8或ASCII等,但UTF-8是比较常见的选择,特别是需要支持多语言的情况下。
13

正确的答案是 D
A.random.uniform(a, b) 函数用于生成一个范围在 [a, b) 的随机浮点数,包括 a 但不包括 b
14

正确答案:A
A. CSV文件(逗号分隔值文件)本质上是纯文本文件,它使用普通文本来存储数据,每个记录被逗号分隔开
16.动物园幸福值(回溯)

分析:
1.从 0~n-1 中每次选出k个索引放在数组中,进行排列组合
2.依次遍历这k个索引,获取最大幸福值,输出幸福值
参考代码:
# n, k = map(int, input().split()) # 新引进n只动物,从中挑选k只
# event_time = list(map(int, input().split())) # n只动物活动时间
# appetite = list(map(int, input().split())) # n只动物食量
n, k = 6, 2
event_time = [2, 10, 3, 1, 5, 8]
appetite = [5, 4, 3, 9, 7, 2]
arr = [i for i in range(n)]
res = []
# 1.从 0~n-1 中每次选出k个索引放在数组中,保证把所有的情况都覆盖,且不重复
# 2.依次遍历这k个索引,获取最大幸福值,输出幸福值
def backtrack(start, path):
# 如果当前路径长度达到 k,加入结果集
if len(path) == k:
res.append(path[:])
return
# 遍历所有可能的组合
for i in range(start, len(arr)):
path.append(arr[i])
backtrack(i + 1, path)
path.pop() # 撤销选择
backtrack(0, [])
MAX = 0
for item in res:
a = 0
b = float('inf')
for i in item:
a += event_time[i]
b = min(b, appetite[i])
MAX = max(a * b, MAX)
print(MAX)
17.运动会积分(贪心)

分析:
- 初始化一个数组 awards,长度与输入积分数组相同,每个元素初始为 1,表示每个同学至少有一个奖励。
- 从左到右遍历,如果右边的同学积分比左边的高,那么右边的奖励比左边多 1。(保证升序的奖励)
- 从右到左遍历,如果左边的同学积分比右边的高,且奖励不够(小于右边的奖励加 1),则更新左边的奖励。(保证降序的奖励)
参考代码:
# scores = list(map(int, input("请输入积分榜(用空格隔开): ").split()))
scores = [9, 7, 2, 4, 5, 7, 2, 2, 6]
n = len(scores)
awards = [1] * len(scores) # 每个同学至少有一个奖励
# 从左到右遍历
for i in range(1, n):
if scores[i] > scores[i - 1]:
awards[i] = awards[i - 1] + 1
# 从右到左遍历
for i in range(n - 2, -1, -1):
if scores[i] > scores[i + 1] and awards[i] <= awards[i + 1]:
awards[i] = awards[i + 1] + 1
# 输出奖品详细信息和总金额
total_awards = sum(awards)
print(f"奖励详情如下: {awards}")
print(f"奖品总额为: {total_awards}万元")
18.数字查找

# m, n = map(int, input().split())
m, n = 10, 999
d = dict()
# 统计字符串中0~9的个数
# 1.遍历m~n,分别统计字符,并加入字典
for i in range(m, n + 1):
# 遍历i中的字符
for char in str(i):
d[char] = d.get(char, 0) + 1
for k, v in sorted(d.items()):
print(f"{k}:{v}")
19.字符串对应(最大子数组和)

分析:
Kadane’s算法,遍历整个数组,并在每一步选择是否继续累加当前子数组,还是从当前位置重新开始计算
# 将字符映射为值
def char_to_value(char):
if 'A' <= char <= 'Z':
return ord(char) - ord('A') + 1
elif 'a' <= char <= 'z':
return -(ord(char) - ord('a') + 1)
else:
return 0 # 不应该出现此情况
# 计算
def max_substring_sum(s):
max_sum = current_sum = float('-inf')
for char in s:
value = char_to_value(char)
if current_sum < 0:
current_sum = value
else:
current_sum += value
max_sum = max(max_sum, current_sum)
return max_sum
# 示例输入
input_string1 = "ABcED"
input_string2 = "aHweuTUILcSeDvOPwGRJDeufihbFHECBQwEUewrQQOEWNhjwejwf"
# 输出结果
print("输入样例1的最大子串和:", max_substring_sum(input_string1))
print("输入样例2的最大子串和:", max_substring_sum(input_string2))
真题区
16.魔法王国之旅

17.神秘背包

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)