Python蓝桥杯 复盘历届难题 备战(1)

简介: Python蓝桥杯 复盘历届难题 备战

距离蓝桥杯55天

大一双非本科大数据在读

今天对历届真题进行剖析如有不足请批评指正  



题目都可以在蓝桥杯官网找到并提交测评~

真题训练1:日期类题目>>考察对datetime模块的使用

image.png

日期类题目最重要的就是判断日期的合法性:强大的Python已为我们准备好了强大datetime模块,相比较其他语言,判断日期合法性要简单很多!


一般而言,日期合法性要检查以下几点:year—month—day,year不能以0打头,month和day 对于1~9日期类题目前面常常加上前导0,比如2月3号写成02—03,但是我们真正使用的只有2和3,也就是说还需要去0的操作,其次month∈[1,12],day的范围还要依据month(大月还是小月还是二月),二月这里又涉及到28和29的问题即闰年和平年的问题。

————————————————

版权声明:本文为CSDN博主「Py小郑」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/m0_62277756/article/details/122905076

由此可见,判断起来十分复杂。但如果合理的使用datetime模块,便可迎刃而解!

判断日期合法性板子:

def judge(str):#传入字符串形式的日期
    try:
        year=
        month=
        day=
        datetime.date(year,month,day)#如果日期不合法,会执行except下面那条语句,否则返回True
    except:
        return False
    return True


回到题目本身,根据题意给出的3种排列组合,创建permutations函数 然后遍历(19,20)年份限制,循环判断。


容易出错的点:题目给出的3个参数可能相同,但是我们排列的时候把它认为是不同的,所以需要进行去重>>set(),然后再根据关键字排序输出(列表的元素是可迭代序列)


关键字排序输出:比如s=[(1,2,3),(2,2,3),(2,1,4)]


s.sort(key=lambda x:(x[0],x[1],x[2])) 输出s=[(1, 2, 3), (2, 1, 4), (2, 2, 3)]


感谢这位PY大佬对sort的讲解,对关键字排序不懂的可以看这


a=list(input().strip().split('/'))
import datetime
def judge(str):#判断日期合法性
    try:
        year=int(str[:4])
        month=int(str[4:6]) if str[4]!='0' else int(str[5])
        day=int(str[6:]) if str[6]!='0' else int(str[7])
        if year<1960 or year>2059:return False
        datetime.date(year,month,day)
    except:
        return False
    return True
def permutations(a):#创建组合情况
    l=[]
    l.append([a[0],a[1],a[2]])
    l.append([a[2],a[0],a[1]])
    l.append([a[2],a[1],a[0]])
    return l
ans=[]
for i in permutations(a):
    for j in range(19,21):
        if judge(str(j)+i[0]+i[1]+i[2]):
            ans.append(str(j)+i[0]+'-'+i[1]+'-'+i[2])
#去重 排序输出
ans=list(set(ans))
ans.sort(key=lambda x:(int(x[:4]),int(x[5:7]),int(x[8:])))
for i in ans:
    print(i)


真题训练2:>>考察数学推理能力


image.png


问题分析:不妨包含这N个整数的最短的等差数列有n项,且公差为d


项数n=(最大的-最小的)/d+1 要使得n最小,最大的和最小的数字已经由题目给定,那么问题转化为求d最大的问题


下面举个例子 2 4 6 10 20(排序好了)  相邻两项的差值分别为2 2 4 10


由于这串数据是从等差数列取得,因此任意差值一定是d的倍数


设每个差值是公差的k倍(k>=1),因此差值可以表示为kd>=d


所以对于例子,我们可以列出d<=2,d<=2,d<=4,d<=10


所以d的一个必要条件:s代表相邻两项差值组成的集合,d<=min(s)


强调,为什么是必要条件而不是充分条件:原因在于当d=min(s),未必能构成等差数列,比如1 3 8 ,d<=2 但d的最大值是1


观察两组数据seq=[2,4,6,10,20] d=[2,2,4,10]  dmax=2


seq=[1,3,8] d=[2,5]  dmax=1 我们不妨考虑数组d,里面有N个数据,猜测dmax=N个数据的最大公约数(确实是基于猜测,完整的数学证明还请高手指教)


下面问题就转化为求N个数据的最大公约数:


对于求两个数的gcd,我们已经掌握,那么求N个数字的gcd,我们可以采用递归。


求N个数字的gcd(数字存在列表当中)板子:

def gcd(a,b):
    while b:
        a,b=b,a%b
    return a
def multi_gcd(array):
    l = len(array)
    if l == 1:#基线条件
        return array[0]
    elif l == 2:#基线条件
        return gcd(array[0], array[1])
    else:#递归
        return gcd(multi_gcd(array[:l//2]), multi_gcd(array[l//2:]))
#就是假定左半边的和右半边的是可以求出来的,然后一级一级分下去。


目录
相关文章
|
7月前
|
Python
【备战蓝桥杯】——循环结构
【备战蓝桥杯】——循环结构
59 1
|
2月前
|
Python
蓝桥杯练习题(一):Python组之入门训练题
这篇文章是关于蓝桥杯Python组的入门训练题,包括Fibonacci数列、圆的面积、序列求和和A+B问题的具体代码实现和样例输出。
143 0
|
2月前
|
存储 机器学习/深度学习 算法
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
蓝桥杯Python编程练习题的集合,涵盖了从基础到提高的多个算法题目及其解答。
128 3
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
|
2月前
|
人工智能 Python
蓝桥杯练习题(四):Python组之历届试题三十题
关于蓝桥杯Python组历届试题的三十个练习题的总结,包括题目描述、输入输出格式、样例输入输出以及部分题目的解题思路和代码实现。
50 0
蓝桥杯练习题(四):Python组之历届试题三十题
|
2月前
|
存储 机器学习/深度学习 算法
蓝桥杯练习题(二):Python组之基础练习三十题
蓝桥杯Python编程练习题的集合,包含了三十个不同难度的编程题目,覆盖了基础语法、数据结构和算法等领域。
52 0
|
6月前
|
Java API
备战第十五届蓝桥杯Java软件开发大学B组常见API记录
备战第十五届蓝桥杯Java软件开发大学B组常见API记录
49 0
|
7月前
|
算法 安全 定位技术
【刷题】备战蓝桥杯 — dfs 算法
dfs算法在数据较小的情况下可以使用。 一定一定要确定好终止条件,避免栈溢出。 相应做好回溯,保证每次的遍历都是不一样的选择,避免少结果。 针对题目进行对应细节处理,有能力的话可以进行剪枝优化!!!
85 0
|
7月前
蓝桥杯备战刷题-滑动窗口
蓝桥杯备战刷题-滑动窗口
61 0
|
7月前
|
索引 Python 容器
【备战蓝桥杯】探索Python内置标准库collections的使用
【备战蓝桥杯】探索Python内置标准库collections的使用
102 1
|
人工智能 Python
Python 蓝桥杯 动态规划 2道例题+配套1道历年真题
Python 蓝桥杯 动态规划 2道例题+配套1道历年真题
131 0
Python 蓝桥杯 动态规划 2道例题+配套1道历年真题