Python蓝桥杯等级考试真题–第18级
一、 选择题
答案:A
解析:n=10,10%2==0,所以输出(10//210+5)=(510+5)=55,故答案为A。
答案:B
解析:n=5,i=(2到5),a1=a+i=1+2=3,a2=3+3=6,a3=6+4=10,a4=10+5=15,故答案为B。
答案:B
解析:输入n=9,进入第一次循环,9%30,n=9//3=3,出循环i=1,
进入第二次循环,3%30,n=3//3=1,出循环,i=1+1=2,故答案为B
二、编程题
【参考程序】
def min_cost(n):
# 铅笔包装信息
packages = [(1, 1, float('inf')), (5, 5, 2), (10, 9, 2), (50, 44, 3), (100, 86, 5)]
# 动态规划表,dp[i]表示买i支铅笔的最小花费
dp = [float('inf')] * (n + 1)
dp[0] = 0 # 买0支铅笔的花费是0
# 枚举每一种包装的铅笔
for quantity, price, stock in packages:
# 根据库存限制,最多能买多少包这种包装的铅笔
max_bundles = (n // quantity) if stock == float('inf') else min(n // quantity, stock)
# 更新dp表
for i in range(quantity, n + 1):
for j in range(1, max_bundles + 1):
current_cost = dp[i - j * quantity] + j * price
if current_cost < dp[i]:
dp[i] = current_cost
return dp[n]
# 示例输入
n = int(input())
# 调用函数并输出结果
print(min_cost(n))
解析:首先定义了一个列表packages来存储每种包装的铅笔数量、整包价格和库存数量。接着,使用动态规划的方法来计算购买特定数量铅笔的最小花费。dp列表初始化为float(‘inf’),表示初始时买任意数量的铅笔的花费都是无穷大,除了买0支铅笔的花费为0。然后,对于每一种包装的铅笔,根据其数量、价格和库存,计算能够购买的数量范围,并更新dp表中的最小花费。最后返回dp[n]即为购买n支铅笔的最小花费。