2021第十二届蓝桥杯Python组国赛 (真题&题解)
发布时间
阅读量:
阅读量
本次十二届蓝桥杯国赛试题涵盖了多个算法与编程领域的经典问题,包括带宽计算、质数判断、日期分析、最小权值问题、括号翻转等。A题通过数学计算解决了带宽问题,B题结合质数特性与字符串处理完成了纯质数的判断,C题利用日期和完全平方数的性质解决了完全日期的问题。D题涉及权值最小化,E题通过大写字母的处理完成了大写问题的解决,F题利用数字序列的特性完成了123问题的分析。G题结合冰山模型与递归算法完成了冰山问题的求解,H题通过和与乘积的关系完成了问题的分析,I题利用二进制字符串的特性完成了二进制问题的解决,J题通过栈和括号匹配完成了翻转括号序列的问题。参赛者在比赛中表现出色,尽管算法薄弱,但通过努力获得了不错的成绩,并对未来的算法学习充满信心。建议多尝试新事物,注重积累与成长。
十二届蓝桥杯国赛试题及解析(python组)
- A题:带宽性能优越,主要得益于其优秀的带宽指标。
- B题:纯质数的特性分析纯质数的特性分析。
- C题:完全日期的识别与处理完全日期的识别与处理。
- D题:最小权值的计算方法最小权值的计算方法。
- E题:大写字符的处理策略大写字符的处理策略。
- F题:数字123的特殊处理数字123的特殊处理。
- G题:冰山般的复杂性冰山般的复杂性。
- H题:和与乘积的计算关系和与乘积的计算关系。
- I题:二进制问题的解决方法二进制问题的解决方法。
- J题:翻转括号序列的高效处理翻转括号序列的高效处理。
先分享试题,再逐步完善题解
试题源文件链接在文末
我的感悟
我的经验和建议:不要害怕失败,积极寻求机会,多尝试实践,多接触新事物,通过经历不断成长,持续提升自我。
A题:带宽

【分析】
【代码】
#结果为 25
1Byte=8bit
1MB/s=8Mbps=8Mb/s
200*1024/8=25600KB/s=25MB/s
B题:纯质数

【分析】
【代码】
#纯质数
from math import *
#判断是否为质数
def isPrime(n):
m=int(sqrt(n))+1
for i in range(2,m):
if n%i==0:
return False
return True
#判断每一位是否都为质数
def eve(n):
res=['2','3','5','7']
s=str(n)
if s.count(res[0])+s.count(res[1])+s.count(res[2])+s.count(res[3])==len(s):
return 1
return 0
ans=0
for i in range(20210606):
if (isPrime(i) and eve(i)):
ans+=1
print(ans)
C题:完全日期

【分析】
【代码】
from datetime import *
from math import *
a=date(2001,1,1)
b=date(2021,12,31)
gap=timedelta(days=1)
#求每个数位的和
def cul(n):
summ=0
nn=str(n)
for i in nn:
summ+=int(i)
return summ
#判断是否为完全平方数
def judge(mm):
x=sqrt(mm)
y=int(sqrt(mm))
if x==y:
return 1
return 0
ans=0
while a!=b:
a=a+gap
year=a.year
month=a.month
day=a.day
#和
summm=cul(year)+cul(month)+cul(day)
#print(a)
#print(summm)
if judge(summm):
ans+=1
print(a)
print(ans)
D题:最小权值

【分析】
【代码】
E题:大写

【分析】
【代码】
F题:123

【分析】
【代码】
G题:冰山

【分析】
【代码】
H题:和与乘积

【分析】
【代码】
#样例不能完全通过
n=int(input())
res=list(map(int,input().split()))
ans=0
def judge(n):
summ=sum(n)
cul=1
for i in ress:
cul*=i
if summ==cul:
return 1
return 0
for i in range(n):
for j in range(i,n+1):
ress=res[i:j]
if len(ress)>0:
if judge(ress):
ans+=1
j+=1
i+=1
print(ans)
I题:二进制问题

【分析】
【代码】
#样例不能完全通过
N,K=map(int,input().split())
ans=0
for i in range(1,N+1):
s=bin(i)[2:]
if s.count("1")==K:
ans+=1
print(ans)
J题:翻转括号序列


【分析】
【代码】
链接:https://pan.baidu.com/s/1KoCDQ34GBkf_l3y6t768ww
提取码:7e0n
全部评论 (0)
还没有任何评论哟~
