2021第十二届蓝桥杯Python组国赛 (真题&题解)

2021第十二届蓝桥杯Python组国赛 (真题&题解),第1张

十二届蓝桥杯国赛试题及解析(python组)
  1. A题:带宽
  2. B题:纯质数
  3. C题:完全日期
  4. D题:最小权值
  5. E题:大写
  6. F题:123
  7. G题:冰山
  8. H题:和与乘积
  9. I题:二进制问题
  10. 10.J题:翻转括号序列

先分享试题,再逐步完善题解

试题源文件链接在文末

我的感悟:相对于ACM那些老牌竞赛来说,蓝桥杯得奖是一个并不困难的事情(对于那些想在大学期间获得一些奖项的兄弟来说),第一次参加算法竞赛,先是意外的获得了省一,之后参加国赛又获得国三,对自己的第一次竞赛之旅也算满意。



全部经历完之后,回过头去看,原来拿奖也没这么难(python组,弱省),这次比赛大部分涉及到算法的题都没有写出来(算法薄弱,蓝桥杯拿奖相对容易),知道自己的真实水平,也知道自己在算法部分还有很长一段路要走,但是这通过这次竞赛认识了优秀的人,见识了新的东西,取得一些成绩,以上这些激励着我在课下空余时间去学习算法磨练技术,继续投入到下一次比赛。


希望大三可以突破自己,有朝一日能与学院的高手们同台竞技,为院争光!

我的建议:不要怕失败,多尝试,多接触新的东西,方能在经历中成长,不断突破自己。



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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/570176.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存