十二届蓝桥杯Python组省赛试题及解析
- A题:卡片
- B题:直线
- C题:货物摆放
- D题:路径
- E题:回路计数
- F题:时间显示
- G题:杨辉三角形
- H题:左孩子右孩子
- I题:异或数列
- J题:括号序号
先把省赛试题分享出来,再慢慢完善题解
我的感悟:相对于C++组跟Java组来说,Python组的竞争可能相对较小,省赛能得奖的几率很大。这次省赛,在学校老师的建议下上了Python组的车,没想到最后竟然在省一区找到了自己的名字(省赛时自己是算法小白)。省赛已经过去了快一个月,离国赛(6月5号)也不远了,现在正在积极学习算法备战国赛,希望能不辜负老师的期望拿到国奖,也算给自己一个交代。冲!
试题原文件的链接在文末
A题:卡片
【分析】
拼接每个数字,如果其中单个卡片的数量超过2021,则中断循环,并输出拼接前的上一个数
【代码】
n=1
s=""
num=2021
while True:
s=s+str(n)
#拼接每个数字,如果其中单个卡片的数量超过2021,则中断循环,并输出拼接前的上一个数
#这里只用判断1就行了,因为1用的最快
if s.count("0")>num or s.count("1")>num or s.count("2")>num or s.count("3")>num or s.count("4")>num or s.count("5")>num or s.count("6")>num or s.count("7")>num or s.count("8")>num or s.count("9")>num:
print(n-1)
break
n+=1
#结果为 3181
B题:直线
【分析】
【代码】
在这里插入代码片
C题:货物摆放
【解析】
【代码】
import time
startTime=time.time()
n=int(input())
s=[]
#找出n所有的因数
for i in range(1,int(n**0.5)+1):
if n%i==0:
s.append(i)
s.append(n//i)
res=set() #set集合可以自动去重
for x in s:
for y in s:
for z in s:
if x*y*z==n:
res.add((x,y,z))
endTime=time.time()
print("costTime",endTime-startTime) #耗时
print(len(res))
D题:路径
【解析】
【代码】
在这里插入代码片
E题:回路计数
【解析】
【代码】
在这里插入代码片
以下为大题
F题:时间显示
【样例输入 1】
46800999
【样例输出 1】
13:00:00
【样例输入 2】
1618708103123
【样例输出 2】
01:08:23
【解析】
【代码】
#
import datetime
n=int(input())
beginTime=datetime.datetime(1970,1,1,0,0,0)
#定义时间元,只需开始时间加上间隔就可得到结束时间,然后再做格式控制输出只取时间部分
sep=datetime.timedelta(milliseconds=n)
endTime=beginTime+sep
#print(beginTime)
#print(endTime)
# :为格式限定符,0表示填充的字符,>表示右对齐,2表示宽度,d表示类型
#综上:{:0>2d}的意思为:右对齐,空位补零的长度为2的整数(考试前一天刚好复习到哈哈哈)
print("{:0>2d}:{:0>2d}:{:0>2d}".format(endTime.hour,endTime.minute,endTime.second))
G题:杨辉三角
【评测用例规模与约定】
对于 20% 的评测用例,1 ≤ N ≤ 10;
对于所有评测用例,1 ≤ N ≤ 1000000000。
【解析】
【代码】
在这里插入代码片
H题:左孩子右兄弟
【评测用例规模与约定】
对于 30% 的评测用例,1 ≤ N ≤ 20;
对于所有评测用例,1 ≤ N ≤ 100000。
【解析】
【代码】
在这里插入代码片
I题:异或数列
【样例输入】
4
1 1
1 0
2 2 1
7 992438 1006399 781139 985280 4729 872779 563580
【样例输出】
1011
【评测用例规模与约定】
对于所有评测用例,1 ≤ T ≤ 200000,1 ≤ ∑Ti=1 ni ≤ 200000,0 ≤ Xi < 2^20
【解析】
【代码】
在这里插入代码片
J题:括号数列
【解析】
【代码】
在这里插入代码片