Python蓝桥杯青少年组第十五届STEMA真题及解析

选择题

答案:B

答案:C

答案:D

答案:A

解析:A-对称差集 B-并集 C-子集 D-交集

答案:C

编程题

s = input()

if s.islower():
    print("Y")
else:
    print("N")
s = input()
print(s.split('.')[0])
n = int(input())
li = [str(int(i) * int(i)) for i in input().split(',') if int(i) % 2 == 0]
print(','.join(li))
res = 0
for i in range(len(s)):
    for j in range(i, len(s)):
        t = s[i: j + 1]
        st = set(t)
        if len(st) == j - i + 1:
            res = max(res, j - i + 1)
print(res)

解析:贪心算法

1.只有 1 匹马,过河时间为a,结果为 a;

2.有 2 匹马,过河时间为 a、b 且 a<b,结果为 b;

3.有 3 匹马,过河时间为 a、b、c 且 a<b<c,结果为 a+b+c;

4.超过 4 匹马,过河时间为 a<b<......<c<d,分为两种情况:

a 和 c 过河,a 返回,时间 a + c;a 和 d 过河,a 返回,时间 a + d;总时间 2a + c + d

a 和 b过河,b返回,时间 a + b;c 和 d 过河,b 返回,时间 b + d;总时间 a + 2b + d

以上两种情况取最小值。

n = int(input())
li = [int(i) for i in input().split()]

li.sort()

res = 0
while n >= 4:
    res += min(2 * li[0] + li[n - 2] + li[n - 1], li[0] + 2 * li[1] + li[n - 1])
    n -= 2

if n == 3:
    res += li[0] + li[1] + li[2]
elif n == 2:
    res += li[1]
elif n == 1:
    res += li[0]

print(res)

解析:动态规划算法

从倒数第二行开始,每一个格子里面的数据加上其正下方和右下方两个格子里面数字的最大值。

n = int(input())

li = []

for i in range(n):
    t_li = [int(i) for i in input().split(',')]
    li.append(t_li)

for i in range(n - 2, -1, -1):
    for j in range(i + 1):
        li[i][j] += max(li[i + 1][j], li[i + 1][j + 1])

print(li[0][0])
原文链接:,转发请注明来源!