第十一届蓝桥杯大赛软件类省赛第二场python大学组题解(源码+注释)

文章目录

    • 一.考试须知
    • 二.题解
      • 试题A:门牌制作
          • 1.题目
          • 2.解析
          • 3.源码
      • 试题B:寻找2020
          • 1.题目
          • 2.解析
          • 3.源码
      • 试题C:跑步锻炼
          • 1.题目
          • 2.解析
          • 3.源码
      • 试题D:蛇形填数
          • 1.题目
          • 2.解析
          • 3.源码
      • 试题E:排序
          • 1.题目
          • 2.解析
      • 试题F:成绩统计
          • 1.题目
          • 2.解析
          • 3.源码
      • 试题G:单词分析
          • 1.题目
          • 2.解析
          • 3.源码
      • 试题H:数字三角形
          • 1.题目
          • 2.解析
          • 3.源码
      • 试题I:平面切分
          • 1.题目
          • 2.解析
          • 3.源码
      • 试题J:装饰珠
          • 1.题目
          • 2.解析
          • 3.源码

一.考试须知

第十一届蓝桥杯大赛软件类省赛第二场python大学组题解(源码+注释)_第1张图片

二.题解

试题A:门牌制作

1.题目

第十一届蓝桥杯大赛软件类省赛第二场python大学组题解(源码+注释)_第2张图片

2.解析

本题求解从1到2020的数字中出现了多少个2,用循环遍历将每个数字字符串化,统计每个字符串中的2的数量并相加即可

3.源码
num = 0
for i in range(2021):
    num += str(i).count("2")
print(num)

答案等于624

试题B:寻找2020

1.题目

第十一届蓝桥杯大赛软件类省赛第二场python大学组题解(源码+注释)_第3张图片

2.解析

循环生成二维列表,按照规则依次遍历

3.源码
num = [list(input()) for i in range(6)]
ans = 0
# 行为2020
for i in range(6):
    for j in range(3):
        if num[i][j] == "2" and num[i][j + 1] == "0" and num[i][j + 2] == "2" and num[i][j + 3] == "0":
            ans += 1
# 列为2020
for i in range(3):
    for j in range(6):
        if num[i][j] == "2" and num[i + 1][j] == "0" and num[i + 2][j] == "2" and num[i + 3][j] == "0":
            ans += 1
# 斜为2020
for i in range(3):
    for j in range(3):
        if num[i][j] == "2" and num[i + 1][j + 1] == "0" and num[i + 2][j + 2] == "2" and num[i + 3][j + 3] == "0":
            ans += 1
print(ans)

答案为5

试题C:跑步锻炼

1.题目

第十一届蓝桥杯大赛软件类省赛第二场python大学组题解(源码+注释)_第4张图片

2.解析

运用datetime库,详细库讲解可以查看博文python常用标准库总结

3.源码
import datetime

num = 0
start_time = datetime.datetime(2000, 1, 1)
end_time = datetime.datetime(2020, 10, 1)
while start_time <= end_time:
    if start_time.day == 1 or start_time.weekday() == 0:
        num += 2
    else:
        num += 1
    start_time += datetime.timedelta(days=1)
print(num)

答案为8879

试题D:蛇形填数

1.题目

第十一届蓝桥杯大赛软件类省赛第二场python大学组题解(源码+注释)_第5张图片

2.解析

不难发现规律,斜线上的数字差是4的倍数

第十一届蓝桥杯大赛软件类省赛第二场python大学组题解(源码+注释)_第6张图片

3.源码
n = 1
for i in range(20):
    n += i * 4
print(n)

答案为761

试题E:排序

1.题目

第十一届蓝桥杯大赛软件类省赛第二场python大学组题解(源码+注释)_第7张图片

2.解析

这其实是一道思维题,我们首先要清楚冒泡排序的原理,假如要把987654321从小到大排序,则需要从头依次找到最大的数字依次交换,则需要交换9*(9-1)/2次(共36次)即可把原数列交换成123456789,如果数列不是完全逆序,则不满足该公式
由冒泡排序可知,交换的次数和字符串的长度有关,如果字符串的的长度为n,且为完全逆序,则交换次数则为n*(n-1)/2,最为接近100次的且最短的即15字符的字符串,即为
onmlkjighfedecba,交换该字符串共需要105次,题目要求100次,所以要减少5次,把第六位的字符提前到首位即可,所以最终答案为jonmlkighfedecba

试题F:成绩统计

1.题目

第十一届蓝桥杯大赛软件类省赛第二场python大学组题解(源码+注释)_第8张图片
第十一届蓝桥杯大赛软件类省赛第二场python大学组题解(源码+注释)_第9张图片

2.解析

简单的模拟

3.源码
n = int(input())
x = 0
y = 0
for i in range(n):
    score = int(input())
    if score >= 60:
        x += 1
    if score >= 85:
        y += 1
print(str(int(round(x / n, 2) * 100)) + "%")
print(str(int(round(y / n, 2) * 100)) + "%")

试题G:单词分析

1.题目

第十一届蓝桥杯大赛软件类省赛第二场python大学组题解(源码+注释)_第10张图片
第十一届蓝桥杯大赛软件类省赛第二场python大学组题解(源码+注释)_第11张图片

2.解析

签到题

3.源码
s = list(input())
max_word = "a"
max_number = 0
for i in s:
    temp = s.count(i)
    if temp > max_number:
        max_word = i
        max_number = temp
print(max_word)
print(max_number)

明天考试,后面的正在写

试题H:数字三角形

1.题目

第十一届蓝桥杯大赛软件类省赛第二场python大学组题解(源码+注释)_第12张图片

第十一届蓝桥杯大赛软件类省赛第二场python大学组题解(源码+注释)_第13张图片

2.解析

二叉树遍历即可

3.源码

试题I:平面切分

1.题目

第十一届蓝桥杯大赛软件类省赛第二场python大学组题解(源码+注释)_第14张图片

2.解析

找规律

3.源码

试题J:装饰珠

1.题目

第十一届蓝桥杯大赛软件类省赛第二场python大学组题解(源码+注释)_第15张图片第十一届蓝桥杯大赛软件类省赛第二场python大学组题解(源码+注释)_第16张图片

2.解析

动态规划背包问题

3.源码

你可能感兴趣的:(python,python,算法)