文档详情

第十四届蓝桥杯模拟赛大学B组 Python.doc

发布:2025-02-05约1.01万字共13页下载文档
文本预览下载声明

第十四届蓝桥杯模拟赛大学B组Python

第一题

填空题

请找到一个大于2022的最小数,这个数转换成十六进制之后,所有的数位(不含前导0)都为字母(A到F)。

请将这个数的十进制形式作为答案提交。

刚开始没看懂什么意思,先使用下方语句得到2022的十六进制是0x7E6,难么比它大的数且不含数字的16进制数为AAA,将答案2730填入空中即可

print(hex(2022))

print(int(0xAAA))

第二题

填空题

在Excel中,列的名称使用英文字母的组合。

前26列用一个字母,依次为A到Z,接下来26*26列使用两个字母的组合,依次为AA到ZZ。

请问第2022列的名称是什么?

解法1:这题很浅显了,其实就是计算出2022的27进制是多少?填空题不考虑时间复杂度了,直接使用暴力算法。结果是BYT

foriinrange(26):

forjinrange(26):

forkinrange(26):

if26*26*i+26*j+k==2022:

s=chr(i+96)+chr(j+96)+chr(k+96)

break

print(s.upper())

解法2:它已经告诉我们用的是excel了,那我们就听它的用excel来做吧!毕竟填空题讲究的就是不择手段。

需要值得注意的是我用的xls格式的只能拖动到256列,而xlsx格式的表格似乎可以拖动到∞行。

BYR BYS BYT

2020 2021 2022

第三题

对于一个日期,我们可以计算出年份的各个数位上的数字之和,也可以分别计算月和日的各位数字之和。

请问从1900年1月1日至9999年12月31日,总共有多少天,年份的数位数字之和等于月的数位数字之和加日的数位数字之和。

例如,2022年11月13日满足要求,因为2+0+2+2=(1+1)+(1+3)。

请提交满足条件的日期的总数量。

看到诸如此类的日期题,立刻想到的是python的datetime库,它属于python内置的库,并不属于第三方库,我们在算法比赛中是可以调用的。

最后算出来的结果是70910,使用到的算法比较暴力,需要等大搞一分钟程序才会计算出最终结果,填空题就不纠结这么多了。

importdatetime

defcheck(time):

year,month,day=time.split(-)

num1,num2,num3=0,0,0

foriinyear:

num1+=int(i)

foriinmonth:

num2+=int(i)

foriinday:

num3+=int(i)

ifnum1==num2+num3:

returnTrue

else:

returnFalse

num=0

start=datetime.date(1900,1,1)

end=datetime.date(9999,12,31)

whilestart=end:

ifcheck(str(start)):

num+=1

ifstart==end:

break

start+=datetime.timedelta(days=1)

print(num)#答案是70910

第四题

小蓝有30个数,分别为:99,22,51,63,72,61,20,88,40,21,63,30,11,18,99,12,93,16,7,53,64,9,28,84,34,96,52,82,51,77。

小蓝可以在这些数中取出两个序号不同的数,共有30*29/2=435种取法。

请问这435种取法中,有多少种取法取出的两个数的乘积大于等于2022。

就是用一个两层循环使得数字两两之间相乘就可以了,需要注意的是要排除自己乘自己的情况。

答案是189

ans=0

li=[99,22,51,63,72,61,20,88,40,21,63,30,11,18,99,12,93,16,7,53,64,9,28,84,34,96,52,82,51,

显示全部
相似文档