大家好,我是爱学习的小蓝,欢迎交流指正~ 

全网最详细蓝桥杯真题+解析+代码,绝对通俗易懂,一点就通!
专治各种没资源,没思路,没代码等新手入门级BUG
🏆全文目录(1星简单 2星中等 3星困难)
⭐ 试题B:2020
⭐⭐试题D:蛇形填数
⭐试题G:单词分析
⭐⭐⭐试题I:平面划分
⭐⭐⭐试题J:装饰珠

考察题型:枚举
涉及知识点:字符串 基础语法
思路分析:
老规矩,蓝桥杯第一题送分,白给自然要全拿!
思路:遍历1到2020,把数字转换成字符串str(),调用统计方法.count()就搞定了!
count=0 #初始化计算器为0
for i in range(1,2021): #遍历1~2020
count+=str(i).count("2") #转化成字符串,再调用count方法
print(count) #624
小蓝有一个数字矩阵,里面只包含数字 0 和 2。小蓝很喜欢 2020,他想找到这个数字矩阵中有多少个 2020 。 小蓝只关注三种构成 2020 的方式:
• 同一行里面连续四个字符从左到右构成 2020。
• 同一列里面连续四个字符从上到下构成 2020。
• 在一条从左上到右下的斜线上连续四个字符,从左上到右下构成 2020。
例如,对于下面的矩阵:
2 2 0 0 0 0
0 0 0 0 0 0
0 0 2 2 0 2
0 0 0 0 0 0
0 0 0 0 2 2
0 0 2 0 2 0
一共有 5 个 2020。
其中 1 个是在同一行里的,1 个是在同一列里的,3 个 是斜线上的。 小蓝的矩阵比上面的矩阵要大,由于太大了,他只好将这个矩阵放在了一个文件里面,在试题目录下有一个文件 2020.txt,里面给出了小蓝的矩阵,请问有多少个2020?
2 解析
难度系数:⭐⭐
考察题型:枚举
涉及知识点:搜索
思路分析:
事先说明一下,下面代码用测试案例举个栗子~学会了方法,再多的数据也不怕。
根据题目给出的三种方法遍历搜索2020。
按行,按列,按对角线,一个个枚举就完事了。
#题解2020
nums=[["2","2","0","0","0","0"],
["0","0","0","0","0","0"],
["0","0","2","2","0","2"],
["0","0","0","0","0","0"],
["0","0","0","0","2","2"],
["0","0","2","0","2","0"]]
ans=0 #计数器
#同一行遍历查找
for i in range(len(nums)):
for j in range(len(nums)-3):
if nums[i][j]=="2" and nums[i][j+1]=="0" and nums[i][j+2]=="2" and nums[i][j+3]=="0":
ans+=1
#同一列遍历查找
for i in range(len(nums)-3):
for j in range(len(nums)):
if nums[i][j]=="2" and nums[i+1][j]=="0" and nums[i+2][j]=="2" and nums[i+3][j]=="0":
ans+=1
#对角线遍历查找
for i in range(len(nums)-3):
for j in range(len(nums)-3):
if nums[i][j]=="2" and nums[i+1][j+1]=="0" and nums[i+2][j+2]=="2" and nums[i+3][j+3]=="0":
ans+=1
print(ans)#5
小蓝每天都锻炼身体。
正常情况下,小蓝每天跑1千米。如果某天是周一或者月初(1日),为了激励自己,小蓝要跑2千米。如果同时是周一或月初,小蓝也是跑2千米。
小蓝跑步已经坚持了很长时间,从2000年1月1日周六(含)到2020年10月1日周四(含)。请问这段时间小蓝总共跑步多少千米?
难度系数:⭐⭐
考察题型:枚举
涉及知识点:datetime日期模块
思路分析:
咋一看题目,竟然考日期,心想:芭比Q了!datetime中的常考函数
可能全忘光了。身为小菜鸟的我,自觉地在菜鸟教程里查阅了
亿下日期模块QAQdatetime.datetime(year="",month="",day="") #传入时间参数,返回时间格式的变量
datetime.timedelta(days="") #返回参数对应的时间间隔,作用是可以进行时间加减
datetime.weekday() #判断星期几,注意星期一返回0,星期二返回1,以此类推
直接看函数定义
可能看不懂,结合楼下代码一起食用更助于消化哦~有的小伙伴说,考试的时候不能上网,搜不到函数肿么办?
其实python自带了帮助文档,里面都有函数的详细注释!
具体搜索方法如图所示:

#跑步锻炼
from datetime import datetime,timedelta #导入日期库中的日期时间和时间间隔两个模块
distance=0 #初始距离置0
start=datetime(2000,1,1) #开始时间
end=datetime(2020,10,1) #结束时间
delta=timedelta(1) #时间间隔
while start<=end: #循环遍历每一天
if start.day==1 or start.weekday()==0: #月初或周一时加两公里
distance+=2
else: #其他时间加一公里
distance+=1
start+=delta #别忘了while循环最后加上间隔
print(distance) #输出结果:8879

难度系数:⭐⭐
考察题型:枚举 数论
涉及知识点:找规律
思路分析:
啊哈,蛇形填数,变相求贪吃蛇的长度?o_o ....还有这种操作。
不慌,第一步先建立j行i列的直角坐标系,这招每道题都通用。
再给每个坐标点赋值,取值不难,从1,2,3···到n,
关键是赋值的顺序如何安排,这就需要找规律了。
我们
不难发现规律,ij坐标相加是奇数,←↓走势,
ij坐标相加是偶数,→↑走势。
BINGGO!
知识回顾:“&”符号是指按位与运算符,比如a&b,如果 a,b都为1结果为1,否则为0
#蛇形填数
i,j,num=0,0,0 #初始化坐标和计数器
while True: #无限循环开始
num+=1 #元素递增
if i==19 and j==19: #从0遍历到19,19 相当于20行20列
break #找到元素,跳出循环
if (i+j)&1: #↙奇数(0+1)(1+0)
i+=1 #向下移↓
if j>0:
j-=1 #向左移←
else: #↗偶数(0+0)(1+1)
j+=1 #向右移→
if i>0:
i-=1 #向上移↑
print(num) #输出答案:761
小蓝最近学习了一些排序算法,其中冒泡排序让他印象深刻. 在冒泡排序中,每次只能交换相邻的两个元素。 小蓝发现,如果对一个字符串中的字符排序,只允许交换相邻的两个字符, 则在所有可能的排序方案中,冒泡排序的总交换次数是最少的。 例如, 对于字符串lan排序,只需要1次交换。对于字符串qiao排序, 总共需要4次交换。 小蓝找到了很多字符串试图排序,他恰巧碰到一个字符串,需要100次交换,
可是他忘了把这个字符串记下来,现在找不到了。 请帮助小蓝找一个只包含小写英文字母且没有字母重复出现的字符串,对该串的字符排序,正好需要100次交换。如果可能找到多个,请告诉小蓝最短的那个。如果最短的仍然有多个,请告诉小蓝字典序最小的那个。
难度系数:⭐
考察题型:数论
涉及知识点:冒泡排序 时间复杂度
思路分析:
整体思路就是不断缩小答案的范围。
1、先看题目给的条件:包含小写英文字母,没有字母重复出现,那就是在a~z里面找。
2、冒泡排序的排序交换次数有个公式:count=(n*(n-1)) / 2
题目要求交换100次,n一个个代入公式试试看,发现n=15时,count=105次,
说明最多有15个小写英文字母。
3、然后题目要求字典序最小(字典序最小就是指 a,b,c,d的顺序最小)
那就是abcdefghijklmno这15个字母。
如果倒着写:onmlkjihggedcba 它们交换成正序最多要105次。
4、那题目要求100次,那咋办呢?
手动先给它换5次,105次就变成100次了。
o向后换5次,把j换到最前面,答案就是:jonmlkihgfedcba.
#代码验证:判断交换次数是否为100次?
s=list("jonmlkihgfedcba")
cnt=0
#冒泡排序
for i in range(len(s)-1):
for j in range(len(s)-i-1):
if s[j]>s[j+1]:
s[j],s[j+1]=s[j+1],s[j]
print(s)
cnt+=1
print(cnt)


难度系数:⭐
考察题型:枚举
涉及知识点:round()
思路分析:
这道题整体没啥难度,关键是注意
亿点小细节!(~ ̄▽ ̄)~假如最后算出来71.0%,那需要套一个四舍五入函数 round()
举个栗子:round(输入数字,小数位数) =转化结果
round(12.34,1)= 12.3
round(71.0)= 71 (小数位数默认为0)
#枚举-成绩统计
n=int(input()) #n=7
a=[int(input()) for _ in range(n)] #a = [80, 92, 56, 74, 88, 100, 0]
jige=[i for i in a if i>=60] #jige = [80, 92, 74, 88, 100]
youxiu=[i for i in a if i>=85] #youxiu=[92, 88, 100]
print(f"{round(len(jige)/n*100)}%") #及格率 71%
print(f"{round(len(youxiu)/n*100)}%")#优秀率 43%
#f"{x}%":格式化输出 {里面放变量}外面放常数
#round():四舍五入函数 71.428→71 42.857→43
#len()/n:求平均值
#*100:后面加了%,所以前面先乘100 0.71→71


难度系数:⭐
考察题型:枚举
涉及知识点:排序sorted()
#枚举-单词分析
s=list(input())
#s=['d', 'd', 'c', 'c', 'b', 'b', 'a']
ans=sorted(sorted(s),key=lambda x:s.count(x),reverse=True)[0]
#s=['b', 'b', 'c', 'c', 'd', 'd', 'a']
#第一次sorted(s):按字典序从小到大↗排序(a->b->c)
#第二次sorted(···):多次筛选排序
#key=lambda x:s.count(x):按字母出现的频率升序↗排列
#reverse=True:表示降序↘从大到小排列(默认False升序排列)
#[0]:出现最多的字母索引为零'b'
print(ans)#b
print(s.count(ans))#2

输入
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
输出
27
难度系数:⭐⭐
考察题型:动态规划
涉及知识点:模块
思路分析:
1.循环遍历
遇到金字塔形状数据,先构建二重for循环,遍历每个数,进行求和计算O(∩_∩)O
2.递推公式
求和一共三种情况:元素在 最左边 or 中间 or 最右边
3.打印答案
最后打印需要分类讨论,奇数和偶数。
因为题目中要求:”向左下走的次数与向右下走的次数相差不能超过1“
按这个规则自己走一下,会发现答案必然落在中间。
如果n为奇数时,最后必然走到倒数第一行中间的数 a[-1][n//2]
而如果n为偶数时,则取中间两个数的最大值 max(a[-1][n//2-1],a[-1][n//2])
#动规-数字三角形
n=int(input())#5
a=[list(map(int,input().split())) for i in range(n)]
for i in range(1,n): #1~n-1
for j in range(i+1): #0~i
if j==0: #最左边元素只能由右上方得到
a[i][j]+=a[i-1][j]
elif j==i: #最右边元素只能由左上方得到
a[i][j]+=a[i-1][j-1]
else: #中间元素取上方相邻两个最大值
a[i][j]+=max(a[i-1][j-1],a[i-1][j])
if n&1: #奇数行,返回中间值(n%2==1)
print(a[-1][n//2])
else: #偶数行,返回中间两个的最大值
print(max(a[-1][n//2-1],a[-1][n//2])) #27
'''样例输入 样例输出
i\j 0 1 2 3 4 0 1 2 3 4
0 7 7
1 3 8 10 15
2 8 1 0 18 16 15
3 2 7 4 4 20 25 20 19
4 4 5 2 6 5 24 30 27 26 24
'''
持续更新中······
持续更新中······
小蓝在这给大家拜年了!
祝看过文章的小伙伴轻轻松松拿下省一!

我有一个字符串input="maybe(thisis|thatwas)some((nice|ugly)(day|night)|(strange(weather|time)))"Ruby中解析该字符串的最佳方法是什么?我的意思是脚本应该能够像这样构建句子:maybethisissomeuglynightmaybethatwassomenicenightmaybethiswassomestrangetime等等,你明白了......我应该一个字符一个字符地读取字符串并构建一个带有堆栈的状态机来存储括号值以供以后计算,还是有更好的方法?也许为此目的准备了一个开箱即用的库?
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has
我正在使用ruby1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\
我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru
我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur