python|第十二届蓝桥杯国赛三等奖 大学Python组,部分试题答案

忘了拷贝pdf题目,就把我还记得的题放上来吧!

  • 带宽
    200?8=25
  • 完全日期
    大月小月不说了,大家都知道;就是当时不知道哪些年的2月份具体有多少天,然后用电脑自带的日历根据从2001查到了2021年,代码直接放下面,结果跑完是 977
wq=0 for year in range(2001,2022): ##print(year) for month in range(1,13): ##print(str(year)+str(month)) if month in [1,3,5,7,8,10,12]: print(str(year)+"年,"+str(month)+"月,31天") for d in range(1,32): liebiao = list(str(year)+str(month)+str(d)) a=0 for i in liebiao: a+=int(i) if a in[4,9,16,25,36,49,64]: print(a) wq+=1 if month in [4,6,9,11]: print(str(year)+"年,"+str(month)+"月,30天") for d in range(1,31): liebiao = list(str(year)+str(month)+str(d)) a=0 for i in liebiao: a+=int(i) if a in[4,9,16,25,36,49,64]: print(a) wq+=1 if month ==2 : if year in [2004,2008,2012,2016,2020]: print(str(year)+"年,"+str(month)+"月,29天") for d in range(1,30): liebiao = list(str(year)+str(month)+str(d)) a=0 for i in liebiao: a+=int(i) if a in[4,9,16,25,36,49,64]: print(a) wq+=1 else: print(str(year)+"年,"+str(month)+"月,28天") for d in range(1,29): liebiao = list(str(year)+str(month)+str(d)) a=0 for i in liebiao: a+=int(i) if a in[4,9,16,25,36,49,64]: print(a) wq+=1 print(wq)

  • 123
    要求输入一个行数,之后每一行分别是起始计算点和结束计算点。我们只需要根据结束计算点的最大值来构造数列就可以了。在这里实现一行输入两个数字的方法是先整体输入,然后用split切分成一个包含两个值的列表,之后就可以按列表索引分别给起始计算点和技术计算点赋值。代码如下:
asknum = int(input()) qishi=[] jieshu=[] quanbu=[] for i in range(1,asknum+1): zong = input().split(" ") quanbu.append(int(zong[0])) quanbu.append(int(zong[1])) qishi.append(int(zong[0])) jieshu.append(int(zong[1])) maxnum = int(max(quanbu)) a =0 cishu=0 for i in range(1,maxnum+1): cishu = i a+=i if a>=maxnum: break shulie = [] for i in range(1,cishu+1): for a in range(1,i+1): shulie.append(a) for i in range(asknum): sum = 0 for f in range(int(qishi[i]),int(jieshu[i])+1): sum +=shulie[f-1] print(sum) sum = 0

  • 二进制问题
    具体流程:输一个数字后输出其二进制,强制转换为字符串,替换掉开头的"0b",之后统计1的个数就行啦。代码如下:
zong = input().split() N=int(zong[0]) K=int(zong[1]) sum = 0 for i in range(1,N+1): flag=0 for a in str(bin(i)).replace('0b',''): if a in ['1']: flag+=1 if flag == K: sum+=1 print(sum)

  • 和与乘积
    循环遍历就可以了其实,时间紧,具体细节之后再补充,先放代码:
long = int(input()) shulie = input().split(" ") zong = 0 for i in range(long): for a in range(i,long): chengji=1 qiuhe = 0 for b in range(i,a+1): qiuhe += int(shulie[b]) chengji *= int(shulie[b]) if qiuhe == chengji: zong+=1 chengji=1 qiuhe = 0 print(zong)

  • 大写
    小写转大写,很简单,用函数对数字和字母进行转换,之后减去大小写字母对应的差就行,代码如下:
s = input() for i in s: if ord(i) >=97 and ord(i) <=122: print(chr(int(ord(i))-32),end="") else: print(i,end="")

【python|第十二届蓝桥杯国赛三等奖 大学Python组,部分试题答案】总体感觉国赛试题比省赛简单,由于个人编程水平有限,代码仅供参考!
最后证书镇楼哈哈!

    推荐阅读