蓝桥杯pythonB组第十一届真题详解

摆烂摆不下去了,继续写python

1、门牌制作

题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

小蓝要为一条街的住户制作门牌号。

这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。

小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符1、0、1、7,即需要 1 个字符 0,2 个字符 1,1 个字符
7。

请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?

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

这题就利用python str类型函数,秒出

2、寻找2020

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

同一行里面连续四个字符从左到右构成 2020。

同一列里面连续四个字符从上到下构成 2020。

在一条从左上到右下的斜线上连续四个字符,从左上到右下构成 2020。

例如,对于下面的矩阵:

220000
000000
002202
000000
000022
002020

一共有 5 个 2020。其中 1 个是在同一行里的,1 个是在同一列里的,3 个 是斜线上的。

小蓝的矩阵比上面的矩阵要大,如下给出了小蓝的矩阵。

请帮助小蓝确定在他的矩阵中有多少个 2020。

>>> data="输入字符串 300*300"
>>> data=data.split('\n')
>>> row=len(data)
>>> row
300
>>> col=len(data[0])
>>> col
300
>>> 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)
16520

python果然是地球上最强大的语言,这题就是很简单的判断,注意别出界了,先用小样本测一下。

3、跑步锻炼

题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

小蓝每天都锻炼身体。

正常情况下,小蓝每天跑 1 千米。如果某天是周一或者月初(1 日),为了激励自己,小蓝要跑 2 千米。如果同时是周一或月初,小蓝也是跑 2 千米。

小蓝跑步已经坚持了很长时间,从 2000 年 1 月 1 日周六(含)到 2020 年 10 月 1 日周四(含)。请问这段时间小蓝总共跑步多少千米?

>>> from datetime import *
>>> s,t=date(2000,1,1),date(2020,10,1)
>>> s
datetime.date(2000, 1, 1)
>>> ans=0
>>> while s<=t:
	if s.day==1 or s.weekday()==0:
		ans+=2
	else:
		ans+=1
	s+=timedelta(1)
>>> print(ans)
8879

这题要是用C++就只能套模板,但是python就可以用内置的datetime模块,大家可以自己玩一玩。

4、蛇形填数

如下图所示,小明用从 1 开始的正整数“蛇形”填充无限大的矩阵。

1 2 6 7 15 …
3 5 8 14 …
4 9 13 …
10 12 …
11 …

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

>>> ans=1
>>> for i in range(20):
	ans+=4*i
	print(ans)	
1
5
13
25
41
61
85
113
145
181
221
265
313
365
421
481
545
613
685
761

这题我是找规律做得…不想多写就多想

5、排序

这题我们前面的章节写过了,链接贴在这排序

6、成绩描述

题目描述
小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。

如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。

请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整数。

>>> n=int(input())
7
>>> jige,youxiu=0,0
>>> for i in range(n):
	x=int(input())
	if x>=60: jige+=1
	if x>=85: youxiu+=1
80
92
56
74
88
100
0
>>> print("%.0f%%" % (100*jige/n))
71%
>>> print("%.0f%%" % (100*youxiu/n))
43%

这道题就是学会print输出格式就好,明白百分数(整数)如何输出

7、单词分析

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

现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这个字母出现的次数。

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

可以看到我换编辑器了,这IDEL用着属实迷糊,但貌似官方比赛电脑也只有这东西,这题送分

8、数字三角形

这题我们前面也做过啦数字三角形
当然我发现之前解释的不太全面,因为题目要求向左走次数与向右次数差值不超过1,所以到达最后一层一定在中间位置。

9、平面切分

题目描述
平面上有 N 条直线,其中第 i 条直线是 y=Ai*x+Bi

请计算这些直线将平面分成了几个部分。

n=int(input())
node=[]
for i in range(n):
  temp=list(map(int,input().split()))
  if temp not in node:
    node.append(temp)
ans=1
for i in range(0,len(node)):
  temp=node[i]
  cut=[]
  for j in range(i):
    if(temp[0]!=node[j][0]):
      x=(temp[1]-node[j][1])/(temp[0]-node[j][0])
      y=x*temp[0]+temp[1]
      z=list((x,y))
      if z not in cut:
        cut.append(z)
  ans+=len(cut)+1
print(ans)

这道题呢,死去的高中数学又来攻击我,首先要判断新加入的直线与之前的直线有无重合、相交、平行等情况,如果有就分开判断。

  1. 全平行,+1
  2. 每相交一个点,+2

10、装饰珠

蓝桥杯pythonB组第十一届真题详解_第1张图片
这题是个背包问题,我也不会,多刷DP,加油兄弟们,我们都有光明的未来
看blog不要跳行,慢慢读一般就可以懂,跳着读很容易出问题

你可能感兴趣的:(蓝桥杯Python,蓝桥杯,职场和发展)