蓝桥杯真题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

记录备注pythonB组蓝桥杯。


提示:以下是本篇文章正文内容,下面案例可供参考

一、跑步锻炼

题目描述

小蓝每天都锻炼身体。
正常情况下,小蓝每天跑1 千米。如果某天是周一或者月初(1 日),为了激励自己,小蓝要跑2 千米。如果同时是周一或月初,小蓝也是跑2 千米。
小蓝跑步已经坚持了很长时间,从2000 年1 月1 日周六(含)到2020 年10 月1 日周四(含)。
请问这段时间小蓝总共跑步多少千米?

import datetime
import time
a=datetime.date(2000,1,1)
b=datetime.date(2020,10,1)
c=datetime.timedelta(1)#timedelta是时间间隔
count=0
while a<=b:
    if a.weekday()==0 or a.day==1:#weekday的规则是周一为0,周日为6
        count+=2
    else:
        count+=1
    a+=c
print(count)

还是说,蓝桥杯每一年都有一道有关日期的题,这就是python的time,datetime,calendar库的作用显现的时候

这是一道结果填空的题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

结果为8879

二、门牌制作

题目描述

小蓝要为一条街的住户制作门牌号。
这条街一共有2020 位住户,门牌号从1 到2020 编号。
小蓝制作门牌的方法是先制作0 到9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌1017 需要依次粘贴字符1、0、1、7,即需要1 个字符0,2 个字符1,1 个字符7。
请问要制作所有的1 到2020 号门牌,总共需要多少个字符2?

a=0
for i in range(1,2021):#要注意一下,是到 2021
    a+=str(i).count("2")#记录字符串中出现2的个数
print(a)

三.蛇形填数

如下图所示,小明用从1 开始的正整数“蛇形”填充无限大的矩阵。
\begin{matrix} 1 & 2 & 6 & 7 & 15 & ... \\

                        3 & 5 & 8 & 14 & ... \\

                        4 & 9 & 13 & ... \\

                        10 & 12 & ... \\

                        11 & ... \\ ...   
容易看出矩阵第二行第二列中的数是5。请你计算矩阵中第20 行第20 列的数是多少?

#这题我第一遍做的时候是写了两行,然后看见规律了就手算的,用代码更省事了

a=1
b=0#第一行第一列是1
for i in range(1,21):
    a=a+b
    b=4*i#规律是以后每一个数,跟前边的数相差了4的倍数,依次加1
print(a)

四.寻找2020

题目描述

小蓝有一个数字矩阵,里面只包含数字0 和2。小蓝很喜欢2020,他想找到这个数字矩阵中有多少个2020 。
小蓝只关注三种构成2020 的方式:

  • 同一行里面连续四个字符从左到右构成2020。
  • 同一列里面连续四个字符从上到下构成2020。
  • 在一条从左上到右下的斜线上连续四个字符,从左上到右下构成2020。

例如,对于下面的矩阵:

220000
000000
002202
000000
000022
002020

一共有5 个2020。其中1 个是在同一行里的,1 个是在同一列里的,3 个是斜线上的。 小蓝的矩阵比上面的矩阵要大,由于太大了,他只好将这个矩阵放在了一个文件里面。
在本试题中有一个文件2020.txt,里面给出了小蓝的矩阵。
请帮助小蓝确定在他的矩阵中有多少个2020。
这是一道结果填空的题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得

a=[]
with open("2020.txt") as fp:
    for i in fp.readlines():
        a.append(list(i.strip())#打开文件的方法
count=0
for i in range(len(a)):
    for j in range(len(a[0])-3):
        if a[i][j]=="2" and a[i][j+1]=="0" and a[i][j+2]=="2" and a[i][j+3]=="0":
            count+=1
for i in range(len(a)-3):
    for j in range(len(a[0])):
        if a[i][j]=="2" and a[i+1][j]=="0" and a[i+2][j]=="2" and a[i+2][j]=="0":
            count+=1
for i in range(len(a)-3):
    for j in range(len(a[0])-3):
        if a[i][j]=="2" and a[i+1][j+1]=="0" and a[i+2][j+2]=="2" and a[i+3][j+3]=="0":
            count+=1
print(count)

我感觉这题主要就考察python打开文件的步骤,下边的代码其实很简单,虽然我打开的步骤也是现学的......

五.成绩统计

水题

a=eval(input())
c=[]
m=0
n=0
for i in range(a):
    b=eval(input())
    if b>=60:
        m+=1
    if b>=85:
        n+=1
q=m/a*100
if q-int(q)>=0.5:
    print(f"{int(q)+1}%")
else:
    print(f"{int(q)}%")
p=n/a*100
if p-int(p)>=0.5:
    print(f"{int(p)+1}%")
else:
    print(f"{int(p)}%")

六.单词分析

小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。
现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这个字母出现的次数。

输入格式

输入一行包含一个单词,单词只由小写英文字母组成。
对于所有的评测用例,输入的单词长度不超过1000。

输出格式

输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪个。
如果有多个字母出现的次数相等,输出字典序最小的那个。

def f(x):#跟着某个不知名的大佬学习的排序规律
    return -x[1],x[0]#先根据第二值倒序排列,排完了之后在不打乱的情况下在根据第一个值正序
a=input()
c={}
for i in a:
    c[i]=c.get(i,0)+1
b=sorted(c.items(),key=f)
print(b[0][0])
print(b[0][1])

这种处理字符串的,对python来说也算是比较水的吧

总结:最近一段时间会更蓝桥勤一点,因为快比赛了呜呜呜

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值