蓝桥杯备战练习 python冲击省一

简介: 蓝桥杯备战练习 python冲击省一

距离蓝桥杯42天


学习算法的目的是为了提升我们的思维  


有梦想有担当 冲击省一 冲进大厂 保持持续性的努力


下面一共3道蓝桥杯真题 问题地址+代码分析+知识点考察(学习建议)


问题描述:1204. 错误票据 - AcWing题库


0c2405010fed4f6d86b1607c9cb21c15.png


代码设计分析:(已AC)


先把所有数据存入一个列表s>>利用sort()排序


重号Id必然出现两次 通过循环存储下来


另创建一个连续数值的列表 范围(min(s),max(s))


通过set中的差集操作 找到漏网之鱼 (最后输出set中的元素需将其转换为列表)


重要知识点考察:列表sort()函数  Python List sort()方法 | 菜鸟教程 (runoob.com)


集合操作Python set() 函数 | 菜鸟教程 (runoob.com)

n=int(input().strip())
s=[]
res=""
for i in range(n):
    tmp=list(map(int,input().strip().split()))
    s+=tmp
s.sort()
res=""
sl=[i for i in range(min(s),max(s)+1)]
res+=str(list(set(sl)-set(s))[0])#取差集
for i in range(len(s)-1):
    if s[i]==s[i+1]:
        res+=" "+str(s[i])
        break##找重复的
print(res)


问题描述:1205. 买不到的数目 - AcWing题库(已AC)


6f5e58eda73a4ef59c97efe470105902.png


代码设计分析:掌握数论里面一个定理:裴蜀定理:对于互质正整数a,b


p=ax+by (x,y>=0) p不能表示的最大整数的ab-(a+b)


证明过程:先了解一个数论符号:把下面的视频和文章结合起来 方便理解


3abc22f218924f98bdc50170e1ef8e38.png


n,m=map(int,input().split())
print(n*m-n-m)
#ax+by gcd(a,b)=1 则ax+by不能表示的最大整数为ab-(a+b)

问题描述:1210. 连号区间数 - AcWing题库


336fc8ee048a40c8ae2a445dc58b1616.png

暴力枚举法(60分):利用itertools中的combinations 列举出所有区间可能

n=int(input())
s=list(map(int,input().split()))
s.insert(0,0)
count=n#[1,1][2,2]...单独一个数也可以作为一个区间
def judge(res):
    tmp=[i for i in range(min(res),max(res)+1)]
    res=sorted(res)
    if tmp==res:
        return True
    return False
import itertools
p=[j for j in range(1,n+1)]
for k in itertools.combinations(p,2):
    #(1,7)或(7,1)
    start,end=min(k),max(k)
    if judge(s[start:end+1]):
        count+=1
print(count)

aeef907757464535bea4348c0a954f91.png

既然不能满分,转换思路:假设原列表存这样一个连续区间 (顺序不定)


比如[2,4,3,5,6]属于某个列表的子区间,可以发现,它是连续的(按照题意指排序过后)。


题目要求的特定区间 除了需要满足连续性以外 还需要满足下标的某种关系


即子区间的长度=连续区间的长度。详细一点说,我们上面给出的区间,它即是子区间又是连续区间,当把他看作子区间时,他的长度为R-L+1(最左(右)侧对应下标),当把他看作连续区间时,它的长度=6-2+1=5 可以发现=max-min+1


因而题目所要求的就是找到所有满足R-L+1=max-min+1的所有区间的个数


(未AC 80分)

c6a1c28c46254582b8ac697cb0141046.png

一样的思路C++能过 可能Python跑的就是慢一点吧

n=int(input())
s=list(map(int,input().split()))
s.insert(0,0)
count=0
for i in range(1,len(s)):
    for j in range(i,len(s)):
        if j-i+1==max(s[i:j+1])-min(s[i:j+1])+1:
            count+=1
print(count)

我是小郑 正在奔赴热爱 奔赴山海 !欢迎批评指正问题交流

相关文章
|
2月前
|
Python
Python:函数篇(每周练习)
Python:函数篇(每周练习)
96 1
|
5天前
|
算法 安全 定位技术
【刷题】备战蓝桥杯 — dfs 算法
dfs算法在数据较小的情况下可以使用。 一定一定要确定好终止条件,避免栈溢出。 相应做好回溯,保证每次的遍历都是不一样的选择,避免少结果。 针对题目进行对应细节处理,有能力的话可以进行剪枝优化!!!
13 0
|
6天前
|
网络安全 Python
网安之python基础学习练习(2-3)
本篇博文是关于网络安全课程中Python编程的学习实践总结。分享关于两个练习题目及其解决方案。第一个题目要求用户输入姓名并选择一项武技,使用for循环和if判断实现。第二个题目是删除列表中特定值(如'cat')的所有元素,作者展示了两种方法,包括列表推导式和常规循环删除。接下来,文章还介绍了如何编写一个函数,随机生成一副扑克牌(除大小王),并返回一张随机抽取的牌。
|
6天前
|
存储 网络安全 索引
网安之python基础学习练习(1)
本篇博文是关于网络安全课程中Python编程学习的总结,主要内容包括:1) 常见数据类型的回顾和应用,如数字(整数、浮点数、复数)、字符串、列表、元组、集合、字典和布尔类型;2) 数据类型的实例操作,展示如何创建和使用这些类型;3) 数值类型之间的加、减、乘、除和模运算;4) 列表和元组的索引访问;5) 字典的修改,如查看键和值,以及更新值。文章强调了基础知识的重要性,并以“自满必定失败,骄傲必定后悔”作为每日一言。
|
20天前
|
存储 索引 Python
Python从入门到精通——1.3.1练习编写简单程序
Python从入门到精通——1.3.1练习编写简单程序
|
27天前
|
Python
python 格式化、set类型和class类基础知识练习(下)
python 格式化、set类型和class类基础知识练习(下)
24 0
|
27天前
|
索引 Python
python 格式化、set类型和class类基础知识练习(上)
python 格式化、set类型和class类基础知识练习
67 0
|
27天前
|
Python
python 文件操作和学生管理系统练习
python 文件操作和学生管理系统练习
22 0
|
1月前
蓝桥杯备战刷题-滑动窗口
蓝桥杯备战刷题-滑动窗口
7 0
|
3月前
|
Python
Python猜字游戏是一种常见的编程练习
Python猜字游戏是一种常见的编程练习
27 2