编译环境:Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)] on win32
代码用notepad++写的
备注:本文留作作者自用,如有错误敬请指出
蓝桥杯真题:平方和(2019 年省赛)
【题目描述】
小明对数位中含有 2、0、1、9 的数字很感兴趣,在 1 到 40 中这样的数包括 1、2、9、10 至 32、39和 40,共 28个,他们的和是 574,平方和是 14362。
注意,平方和是指将每个数分别平方后求和。
请问,在 1到 2019中,所有这样的数的平方和是多少?
【解题思路】
用 Python,不用任何算法,直接把数字看成字符来统计。
【参考代码】
#写这段代码时我刚学一天Python,大家可以自行优化
num=[]
cnt=0 #顺便计数了
sum=0 #平方和
for n in range(1,2020):
tem='%d' %n #将数字转变为字符串
#下一行太长了,最后加\就可以换行了
if (tem.find('2')>=0) or (tem.find('0')>=0)\
or (tem.find('1')>=0) or(tem.find('9')>=0):
num.append(n**2)
cnt=cnt+1
continue
print(cnt)
for n in num:
sum+=n
print(sum)
【答案】2658417853
蓝桥杯真题:数列求值(2019 年省赛)
【题目描述】
给定数列 1, 1, 1, 3, 5, 9, 17,从第 4 项开始,每项都是前 3项的和。
求第 20190324项的最后 4位数字。
【参考代码】
#这个算法要等待一点时间
num=[1,1,1]
use=[1,1,1]
for n in range(3,20190324):
tem=sum(use)
del use[0]
if tem>=10000:#因为只求后四位数字,所以前面的可以舍去,减少计算量
tem%=10000
use.append(tem)
num.append(tem)
print(num[-1])#输出列表num的最后一项,即第20190324项的最后 4位数字
【答案】4659
蓝桥杯真题:卡片问题(2021年省赛)
【题目描述】
小蓝有很多数字卡片,每张卡片上都是数字 0 到 9。小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。小蓝想知道自己能从 1 拼到多少。例如,当小蓝有 30 张卡片,其中 0 到 9 各 3 张,则小蓝可以拼出 1 到 10,但是拼 11 时卡片 1 已经只有一张了,不够拼出 11。现在小蓝手里有 0 到 9 的卡片各 2021 张,共 20210 张,请问小蓝可以从 1 拼到多少?提示:建议使用计算机编程解决问题。
【参考代码】
num=[0,0,0,0,0,0,0,0,0,0]
n=1
flag=0
while n:
tem='%d' %n
for m in tem:
t=int(m)
num[t]= num[t]+1
if num[t]>=2021:#注意边界
print("n=" +tem)
flag=1
break
if flag>0:
break
n=n+1
【答案】3181