【蓝桥杯真题】Python备战28天

简介: 【蓝桥杯真题】Python备战28天

距离蓝桥杯28天 即使是周末也要按时完成打卡

下面对执梗大哥提供的每日真题训练提供题解

''所有题目均在蓝桥杯官网或者蓝桥云课找到''


1.猴子分香蕉


e9a55cb80f2d42498eed3d68fd5510da.png 问题分析:假设一开始有x个 第一只猴子做完事情后 剩下[(x-1)/5]*4个香蕉 记作x1


第二只猴子做完事情后 剩下[(x1-2)/5]*4个香蕉 记作x2


第三只猴子做完事情后 剩下[(x2-3)/5]*4个香蕉 记作x3...


由此xn+1=[(xn-j)/5]*4 我们只需要保证最后一次的香蕉是5的倍数 大功告成!


细节的地方:每次循环的时候要保证(x-j)大于0且是5的倍数


就是一道很简单的找规律的题目代码已经A

for i in range(4,10000):
    x=i
    for j in range(1,5):
        if (x-j)%5!=0 or x-j<=0:#保证整除5且平分之前个数大于0
            break
        x=int((x-j)/5)*4
    else:
        if x%5==0:
            print(i)
            break
#3141


2.等差数列


f449fb2ada044b9cac0682ef111af1b5.png

问题分析:根据等差数列的通项公式 要使得项数最小 必然公差最大


公差不能无限大 要有制约 ,约束的条件是从出发点开始保证能通过N次的公差累加达到后续的每一个数字


假设有5个数字 前后两两相差 a,b,c,d 为保证从第一个数字st开始经过nd能遍历(st+a,st+a+b,st+a+b+c,st+a+b+c+d) ,如果公差取的太大,会导致无法到达其中某一个数(不连续了),如果公差取的太小,即便能遍历,长度也不符合题意。


那该如何抉择这个问题呢?由前面提到,要使得公差最大,我们可以联想到gcd(最大公约数),但是现在有4个数(上面提到的a,b,c,d) ,与以往gcd(a,b)有所不同,大胆去尝试,如果gcd(a,b,c,d) ,代表着什么?代表着两两作差的数所组成的集合,在这个集合里面所有数的最大公约数。假设gcd(a,b,c,d)=p ,那么其中任意一个数字,一定能够用kp表达同时,这就意味着,一定能够刚从出发点经过n次的累加达到其他任意一个点。又因为是最大公约数而不仅仅是公约数,在这个强条件下,经过的步数一定是最短的,即项数最少。


代码已AC

n=int(input())
l=list(map(int,input().split()))
l.sort()
#项数=[(an-a1)/d]+1 d最大 易想到 最大公约数
#观察数据发现 应该需要求出n个数之间的最大公约数
def gcd(a,b):
    while b:
        a,b=b,a%b
    return a
def l_gcd(nums):
    if len(nums)==1:
        return nums[0]
    elif len(nums)==2:
        return gcd(nums[0],nums[1])
    else:
        return gcd(l_gcd(nums[:len(nums)//2]),l_gcd(nums[len(nums)//2:]))
if max(l)==min(l):
    print(n)
else:
   t=[l[i]-l[i-1] for i in range(1,n)]
   d=l_gcd(t)
   print(int((l[-1]-l[0])/d+1))

3.平方序列


bc9609f9e4d542b08121eff46291f79f.png

问题分析:暴力就好了,注意细节的地方y>x,蓝桥杯的简单题目做到不丢分,细致。


4.倍数问题


8657b82191a4445f88705d62001c5a86.png

问题分析:已经第九题了 可以先试试暴力骗分 有30分

#暴力法 30分
n,k=map(int,input().split())
ans=0
l=list(map(int,input().split()))
import itertools
for i in itertools.combinations(l,3):
    p=list(i)
    if sum(p)>ans and sum(p)%k==0:
        ans=sum(p)
print(ans)


当然还是要正紧做 AC才是我们的最终目标

不过目前小郑还没有做出来 想了挺久的 附上AC的PY思路吧

来源一位DL:

n, k = map(int,input().split())
r = [[0] * 3 for i in range(k)] #记录余数,每个余数记录最大的三个数a、b、c
a = input().split()
# 输入数据就分组 同余一组 维持每组最大的三个数 用插入排序
for i in range(len(a)):    
    re = int(a[i]) % k
    if int(a[i]) > r[re][0]:
            r[re][2], r[re][1], r[re][0] = r[re][1], r[re][0], eval(a[i])
    elif int(a[i]) > r[re][1]:
            r[re][2], r[re][1] = r[re][1], eval(a[i])
    elif int(a[i]) > r[re][2]:
            r[re][2] = eval(a[i]) 
Max = 0
# 按照余数枚举
for i in range(k):
    for j in range(i, k):
        tmp = (k - i + k - j) % k
        v1 = r[i][0]       #a的余数 
        if i == j:
            v2 = r[i][1]   #如果b的余数和a的余数相同
            if i == tmp:   #如果c的余数和a也相同
                v3 = r[i][2]
            else:
                v3 = r[tmp][0]
        else:              #如果b的余数和a的余数不同
            v2 = r[j][0]
            if i == tmp:   v3 = r[i][1]
            elif j == tmp: v3 = r[j][1]
            else:          v3 = r[tmp][0]
        if v1 + v2 + v3 > Max:
            Max = v1 + v2 + v3
print(Max)

有任何疑惑欢迎留言评论 !!

相关文章
|
4月前
|
Python
【备战蓝桥杯】——循环结构
【备战蓝桥杯】——循环结构
43 1
|
3月前
|
Java API
备战第十五届蓝桥杯Java软件开发大学B组常见API记录
备战第十五届蓝桥杯Java软件开发大学B组常见API记录
24 0
|
4月前
|
算法 安全 定位技术
【刷题】备战蓝桥杯 — dfs 算法
dfs算法在数据较小的情况下可以使用。 一定一定要确定好终止条件,避免栈溢出。 相应做好回溯,保证每次的遍历都是不一样的选择,避免少结果。 针对题目进行对应细节处理,有能力的话可以进行剪枝优化!!!
41 0
|
4月前
蓝桥杯备战刷题-滑动窗口
蓝桥杯备战刷题-滑动窗口
28 0
|
4月前
|
索引 Python 容器
【备战蓝桥杯】探索Python内置标准库collections的使用
【备战蓝桥杯】探索Python内置标准库collections的使用
77 1
|
4月前
|
开发者 Python
【备战蓝桥杯】如何使用Python 内置模块datetime去计算我与CSDN相遇的天数
【备战蓝桥杯】如何使用Python 内置模块datetime去计算我与CSDN相遇的天数
60 1
|
4月前
【备战蓝桥杯】——Day1
【备战蓝桥杯】——Day1
43 0
|
4月前
|
算法 测试技术 编译器
蓝桥杯-02-python组考点与14届真题
蓝桥杯-02-python组考点与14届真题
|
4月前
|
Python
第十三届蓝桥杯B组python(试题A:排列字母)
第十三届蓝桥杯B组python(试题A:排列字母)
50 0
|
3天前
|
数据采集 机器学习/深度学习 人工智能
Python编程入门:从零基础到实战应用
【9月更文挑战第15天】本文将引导读者从零开始学习Python编程,通过简单易懂的语言和实例,帮助初学者掌握Python的基本语法和常用库,最终实现一个简单的实战项目。文章结构清晰,分为基础知识、进阶技巧和实战应用三个部分,逐步深入,让读者在学习过程中不断积累经验,提高编程能力。