
青训营-豆包MarsCode技术训练营试题解析十八
豆包青训营是由字节跳动和稀土掘金社区共同发起的技术培训和人才选拔项目,主要面向在校大学生。该项目的目标是培养具有职业竞争力的优秀开发工程师,并提供全程免费的课程,不收取任何费用。
介绍
豆包青训营是由字节跳动和稀土掘金社区共同发起的技术培训和人才选拔项目,主要面向在校大学生。该项目的目标是培养具有职业竞争力的优秀开发工程师,并提供全程免费的课程,不收取任何费用。
课程内容和方向
豆包青训营的课程涵盖前端、后端和AI方向。在这个飞速发展的AI时代,学员将与豆包MarsCode团队一起深入探索技术领域,学习和运用AI,提高编程效率。此外,课程还包括大数据方向,适合对大数据感兴趣的学员学习,
本文提供训练营试题解析供参考
试题1:小U的严格数组判断
问题描述:
def solution(n: int, a: list) -> bool:
# 检查数组是否严格升序
for i in range(n - 1):
if a[i] >= a[i + 1]:
return False
# 计算差值数组 b
b = [a[i + 1] - a[i] for i in range(n - 1)]
# 检查差值数组 b 是否严格降序
for i in range(len(b) - 1):
if b[i] <= b[i + 1]:
return False
return True
if __name__ == '__main__':
print(solution(3, [1, 3, 4]) == True)
print(solution(3, [1, 3, 3]) == False)
print(solution(4, [1, 2, 3, 4]) == False)
试题2:小U的加法魔法
问题描述:
def solution(n: int, a: list) -> int:
# 计算原始总和
original_sum = sum(a)
# 初始化最大总和为原始总和
max_sum = original_sum
# 遍历数组中的每一对相邻元素
for i in range(n - 1):
# 计算将加号变成乘号后的新总和
new_sum = original_sum - a[i] - a[i + 1] + a[i] * a[i + 1]
# 更新最大总和
if new_sum > max_sum:
max_sum = new_sum
return max_sum
if __name__ == '__main__':
print(solution(6, [1, 1, 4, 5, 1, 4]) == 27)
print(solution(3, [2, 3, 5]) == 17)
试题3:小U的商品编号特殊含义统计
问题描述:
小U正在给一批商品进行编号,他希望找出在特定区间内包含特定数字(5、20和520)的商品编号的数量。给定若干个编号区间,你需要分别计算出每个区间内包含数字5,数字20和数字520的编号数量。
def solution(L: int, R: int) -> list:
# 初始化计数器
count_5 = 0
count_20 = 0
count_520 = 0
# 遍历区间内的每个数字
for num in range(L, R + 1):
# 将数字转换为字符串
num_str = str(num)
# 检查是否包含 "5"
if "5" in num_str:
count_5 += 1
# 检查是否包含 "20"
if "20" in num_str:
count_20 += 1
# 检查是否包含 "520"
if "520" in num_str:
count_520 += 1
# 返回结果
return [count_5, count_20, count_520]
if __name__ == '__main__':
print(solution(1, 20) == [2, 1, 0])
print(solution(100, 1000) == [252, 19, 1])
print(solution(520, 5200) == [1441, 187, 6])
试题4:小U的奖学金申请问题
问题描述:
def solution(n: int, x: int, a: list, b: list) -> bool:
# 计算加权总分
weighted_sum = 0
for i in range(n):
weighted_sum += a[i] * b[i]
# 计算总学分
total_credits = sum(a)
# 计算加权平均分
weighted_average = weighted_sum / total_credits
# 检查每门课程的成绩是否及格
for score in b:
if score < 60:
return False
# 检查加权平均分是否不低于标准 x
if weighted_average >= x:
return True
else:
return False
if __name__ == '__main__':
print(solution(4, 75, [4, 3, 2, 1], [80, 70, 90, 60]) == True)
print(solution(3, 85, [3, 2, 5], [90, 85, 88]) == True)
print(solution(5, 80, [2, 2, 3, 1, 4], [78, 80, 79, 85, 88]) == True)
print(solution(6, 70, [4, 3, 2, 1, 2, 3], [60, 72, 65, 90, 85, 95]) == True)
print(solution(4, 90, [2, 2, 2, 2], [89, 91, 92, 85]) == False)
试题5:小U的早餐选择计算
问题描述:
小U同学每天在早餐店有多种主食和饮料可以选择。给定两个数组,staples 表示不同主食的价格,drinks 表示不同饮料的价格。每天早上,小U最多会花费不超过 x 元,他可能选择一份主食、一杯饮料,或只选择主食或饮料中的一个。你的任务是计算小U每天早上有多少种不同的选择,满足其最大花费不超过 x。
例如:对于输入的主食价格 5 20 5 和饮料价格 5 5 2,如果小U的最大花费为 5,则一共有 5 种不同的选择。
def solution(staples: list, drinks: list, x: int) -> int:
count = 0
# 遍历主食列表,检查每个主食价格是否小于等于 x
for staple in staples:
if staple <= x:
count += 1
# 遍历饮料列表,检查每个饮料价格是否小于等于 x
for drink in drinks:
if drink <= x:
count += 1
# 遍历主食和饮料的组合,检查总价格是否小于等于 x
for staple in staples:
for drink in drinks:
if staple + drink <= x:
count += 1
return count
if __name__ == '__main__':
print(solution(staples=[5, 20, 5], drinks=[5, 5, 2], x=5) == 5)
print(solution(staples=[3, 10, 7], drinks=[2, 5], x=7) == 5)
print(solution(staples=[10, 15], drinks=[5, 6], x=20) == 7)
试题6:小U的矩阵转置计算
问题描述:
小U拿到一个大小为 n × n 的矩阵。她需要计算该矩阵的转置权值。转置权值的定义如下:
将矩阵进行转置操作,转置后的矩阵中的元素 b[i][j] 与原矩阵中的元素 a[j][i] 互换位置。
对于每个位置 (i, j),计算原矩阵的元素与转置矩阵对应位置元素的差的绝对值。
最后,将所有差的绝对值累加起来,得出转置权值。
def solution(n: int, a: list) -> int:
# 初始化转置权值为0
transpose_weight = 0
# 遍历矩阵的每个元素
for i in range(n):
for j in range(n):
# 计算原矩阵元素与转置矩阵元素的差的绝对值
# 注意:转置矩阵中的元素 b[i][j] 对应原矩阵中的 a[j][i]
# 这里需要计算 |a[i][j] - a[j][i]|
# 将差的绝对值累加到 transpose_weight 中
transpose_weight += abs(a[i][j] - a[j][i])
# 返回最终的转置权值
return transpose_weight
if __name__ == '__main__':
print(solution(2, [[1, 2], [3, 4]]) == 2)
print(solution(3, [[1, 2, 3], [4, 5, 6], [7, 8, 9]]) == 16)
print(solution(4, [[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4]]) == 20)
更多推荐
所有评论(0)