考前最后一套!蓝桥杯python组元年省赛真题

前言

今天就让我们轰轰烈烈的回忆,好像毕业季!
明天就上考场了,大家准备的怎么样,相应的模块复习了吗,基础知识掌握了吗,我给一张官方出题范围,大家看看能不能自己写一张思维导图出来,文章结尾我会放一张自己做的思维导图供大家回忆过程。
在这里插入图片描述
下面是python2020年省赛题目,因为是第一届,还赶上庚子鼠年,纯纯赢麻了呀。

A:门牌制作

在这里插入图片描述

ans=0
for i in range(1,2021):
  ans+=str(i).count('2')
print(ans)

秒杀题,秒杀题

B:寻找2020

在这里插入图片描述
比较经典的DFS,注意别超界,逐个方向判断就行

import os
import sys
N=300
data=[list(input()) for _ in range(N)]
row=len(data)
col=len(data[0])
res=0
for i in range(row):
    for j in range(col):
        if data[i][j]=='2':
            if j<=col-4 and data[i][j+1]=='0' and data[i][j+2]=='2' and data[i][j+3]=='0':
                res+=1
            if i<=row-4 and data[i+1][j]=='0' and data[i+2][j]=='2' and data[i+3][j]=='0':
                res+=1
            if i<=row-4 and j<=col-4 and data[i+1][j+1]=='0' and data[i+2][j+2]=='2' and data[i+3][j+3]=='0':
                res+=1
print(res)            

C:跑步锻炼

在这里插入图片描述

import datetime
start=datetime.datetime(2000,1,1)
end=datetime.datetime(2020,10,1)
delta=datetime.timedelta(days=1)
ans=0
while start<=end:
  if start.weekday()==0 or start.day==1:
    ans+=2
  else:
    ans+=1
  start+=delta
print(ans)

通篇背诵,通篇背诵,在Python里面日期题很简单,千万别丢分,delta代表差值,days是单位,datetime类型实例有day的属性代表这个月第几天,weekday()函数判断星期几(0-6)
在这里插入图片描述
在这里插入图片描述
官方文件看一眼,明天就得用了嘻嘻

D:蛇形填数

在这里插入图片描述
我记得这个是有规律的,拿笔推一推,借张网图吧
在这里插入图片描述

ans=1
for i in range(1,20):
	ans+=i*4
print(ans)

E:排序

在这里插入图片描述
这个要找特殊情况
考虑冒泡排序的复杂度,N个字母最多需要交换N*(N-1)/2次(完全乱序时)
易知N=15时,有15*14/2=105,即满足100次交换所需的最短字符串有15个字母。
要求字典序最小,那么就取a~o这15个字典序最小的字母
逆向思考,目标字符串经过100次交换后,得到正序字符串abcdefghijklmno,而完全逆序的字符串onmlkjihgfedcba变成正序字符串需要105次交换,那么将完全逆序的字符串交换5次后,便能得到答案。因要求字典序最小,那么将j交换5次提到字符串最前面,就得到了最小的情况

F:成绩统计

在这里插入图片描述
在这里插入图片描述

白给的

n=int(input())
jg=0
yx=0
for i in range(n):
  t=int(input())
  if t>=60:
    jg+=1
  if t>=85:
    yx+=1
print(round(jg/n*100),end="%")
print()
print(round(yx/n*100),end="%")

G:单词分析

在这里插入图片描述

s=input()
num=0
c=' '
for i in s:
    if s.count(i)>num:
        num=s.count(i)
        c=i
print(c)
print(num)

别想太复杂,主打一个count

H:数字三角形

在这里插入图片描述
DP,有三个方向,最左边:左下角只能给右上角,最后边:右下角只能给左上角,中间就正常,输出时要遵循题目要求,方向偏移不能超出1,奇数行就是中间那个,偶数行是中间两者的比较

n=int(input())
arr=[list(map(int,input().split())) for _ in range(n)]
for i in range(1,n):
    for j in range(i+1):
        if j==0:
            arr[i][j]+=arr[i-1][j]
        elif j==i:
            arr[i][j]+=arr[i-1][j-1]
        else:
            arr[i][j]+=max(arr[i-1][j-1],arr[i-1][j])
else:
    if n%2==0:
        print(max(arr[i][n//2-1],arr[i][n//2])
    else:
        print(arr[i][n//2])

I:平面切分

在这里插入图片描述
这题大家先仔细想想,一开始是一个平面,+一个直线就变成了两个,再加个直线就有两种情况
一个是它和第一条相交一个交点,把现在的两个平面分成了4个;另一个是他和第一条重叠或平行,总数+1
所以随便添加一个直线,最少添加一个,变量就是它和其他直线的交点数

n=eval(input())
line=[tuple(map(int,input().split(" "))) for i in range(n)]#用元组收集(k,b)
s=set(line)#去除重复的直线
line=list(s)
if line:
	ans=2#如果有直线,那么至少两个平面
	for i in range(1,len(line)):
		a1,b1=line[i]
		pos=set()#交点集合
		for j in range(i):#取出当前直线前面的直线斜率进行比较
			a2,b2=line[j]
			if a1==a2:#平行或重合
				continue
			x=(b1-b2)/(a1-a2)
			y=a1*x+b1
			pos.add((x,y))#收集交点
		ans+=len(pos)+1#交点数+1
print(ans)

J:装宝珠

这题咱就不看了

结语

呼~ 最后一套也刷完了,一身轻松,今晚睡个好觉,明天提前半小时去考场测试机器。
答应大家的思维导图还没做完,内容我在回忆之前的博客,可能要一段时间,我先放个大体结构在这里,想看的小伙伴可以评论区留言,制作完成后发给大家。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_53415043/article/details/130006211