【蓝桥杯真题】 Python题解

简介: 【蓝桥杯真题】 Python题解

题目来源:蓝桥云课


难度:⭐️


image.png


问题分析:显然是一道筛质数的题目,由于埃筛法上手容易效率也还行,从这个方法入手。


prime[i]:代表第i个质数是prime[i],isprime[i]:代表第i个数字是否为质数 (1或0表示)


cnt:计数器 用于关联到prime的下标

max=20210605
prime=[]
is_prime=[1]*20210606
cnt=0
for i in range(2,max+1):
    if is_prime[i]:
        prime.append(i)
        j=2*i
        while j<=max:
            is_prime[j]=0
            j+=i
#prime保存了(2,20210605)的所有质数
cnt=len(prime)#接下来要去除不纯质数
for i in range(len(prime)):
   for j in str(prime[i]):
       if int(j) not in [2,3,5,7]:
           cnt-=1
           break
print(cnt)


上述代码已经pass,10s内出结果,暴力筛法有点慢,但也能出答案。


🍅最少砝码 题目来自蓝桥云课


难度:⭐️⭐️⭐️


image.png


问题分析:乍一看无从入手 那就尝试找找规律


根据题意 我们就是要以最少的砝码 通过加减构造出最大的一段连续区间


那就枚举几种情况:


当区间等于[1] 砝码只需要1个(重量为1)


当用两个砝码 (1,2)或者(1,3)


前者构造的区间为(1,3) 后者为(1,4) 显然后者更优


接着,如果两个砝码为(1,4) 那么将无法构成连续区间


所以两个砝码能够构造的最大区间为(1,4)


当用三个砝码(1,3,1),(1,3,2)...一直到(1,3,9)我们可以发现都能构造出连续区间


显然(1,3,9)更优 能够构造的连续区间为(1,13)


再来,(观察砝码重量),我们猜测,如果4个砝码重量分别是(1,3,9,27),那么能够构造出的最大连续区间为(1,40),这个是显然的,因为(1,3,9)已经能任意构造[1,13] 配上一个27,区间自然能扩到(1,40)


那么在细化,如果4个砝码重量分别是(1,3,9,n),n<27,那么能够,构造的连续区间和上面同理 为[1,13+n],显然(1,3,9,27)是最优的,符合预期。


因而我们猜测:当砝码重量以公比为3的数列排布时,会形成最优解.。


其中,当有n个砝码时,所能构成的最大区间为:[1,(3**n-1)/2]


(简单观察就能知道:[1],[1,4],[1,13],[1,40]可以看作[1],[1,1+3],[1,1+3+9],[1,1+3+9+27])


所以我们只需要找到第一个n使得(3**n-1)/2>=输入即可(代码已经PASS)


n=int(input())
t=1
while 3**t-1<2*n:
    t+=1
print(t)



灌溉 题目来自蓝桥云课


难度:⭐️⭐️⭐️


image.png


问题分析:maze[i][j]:代表经过maze[i][j]分钟(i,j)充满水


一开始初始化maze[i][j]为-1,0时刻就有的水管就需要赋值为0,即经过0分钟充满水


k=0 把maze中所有值为0的邻居都设置为1,代表其邻居在1分钟后满水


k=1 把maze中所有值为1的邻居都设为2,代表其邻居在2分钟后满水


k=n 把m把maze中所有值为k的邻居都设为k+1,代表其邻居在k+1分钟后满水


最后统计有几个值不等于-1的格子(也可以在每轮赋值邻居的值的时候就计数)


细节:不是所有邻居都要设,需要合法的邻居:不越界,未访问过(不等于-1)就行


代码已经Pass


n,m=map(int,input().split())
t=int(input())
maze=[[-1]*m for i in range(n)]#-1表示未访问
dx=[1,-1,0,0]
dy=[0,0,1,-1]
count=t
for i in range(t):
    row,col=map(int,input().split())
    maze[row-1][col-1]=0#已访问
k=int(input())
def judge(x,y):
    if 0<=x<=n-1 and 0<=y<=m-1 and maze[x][y]==-1:
        return True
    return False
for i in range(0,k):#经过K分钟
    for x in range(n):
        for y in range(m):
            if maze[x][y]==i:
                for _ in range(4):
                    nx,ny=x+dx[_],y+dy[_]
                    if judge(nx,ny):
                        maze[nx][ny]=i+1
                        count+=1
print(count)


有任何不懂的可以在下面提问噢 !一起进步👍

结束语:特别感谢执梗大哥👍提供了一个很好的群体学习环境 【蓝桥真题4】练练填空就想进国赛?拿下大题才能让你真正有底气(蓝桥31日冲刺打卡)_执梗的博客-CSDN博客

目录
相关文章
|
25天前
|
Python
蓝桥杯练习题(一):Python组之入门训练题
这篇文章是关于蓝桥杯Python组的入门训练题,包括Fibonacci数列、圆的面积、序列求和和A+B问题的具体代码实现和样例输出。
89 0
|
25天前
|
存储 机器学习/深度学习 算法
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
蓝桥杯Python编程练习题的集合,涵盖了从基础到提高的多个算法题目及其解答。
47 3
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
|
25天前
|
人工智能 Python
蓝桥杯练习题(四):Python组之历届试题三十题
关于蓝桥杯Python组历届试题的三十个练习题的总结,包括题目描述、输入输出格式、样例输入输出以及部分题目的解题思路和代码实现。
21 0
蓝桥杯练习题(四):Python组之历届试题三十题
|
25天前
|
存储 机器学习/深度学习 算法
蓝桥杯练习题(二):Python组之基础练习三十题
蓝桥杯Python编程练习题的集合,包含了三十个不同难度的编程题目,覆盖了基础语法、数据结构和算法等领域。
22 0
|
6月前
|
索引 Python 容器
【备战蓝桥杯】探索Python内置标准库collections的使用
【备战蓝桥杯】探索Python内置标准库collections的使用
84 1
|
6月前
|
开发者 Python
【备战蓝桥杯】如何使用Python 内置模块datetime去计算我与CSDN相遇的天数
【备战蓝桥杯】如何使用Python 内置模块datetime去计算我与CSDN相遇的天数
69 1
|
6月前
|
算法 测试技术 编译器
蓝桥杯-02-python组考点与14届真题
蓝桥杯-02-python组考点与14届真题
|
C++ Python
【蓝桥杯真题】29天备战 Python讲解
【蓝桥杯真题】29天备战 Python讲解
147 1
【蓝桥杯真题】29天备战 Python讲解
|
Python
【蓝桥杯国赛真题】备战24天 Python
【蓝桥杯国赛真题】备战24天 Python
130 0
【蓝桥杯国赛真题】备战24天 Python
|
Python
【蓝桥杯真题】Python备战28天
【蓝桥杯真题】Python备战28天
175 0
【蓝桥杯真题】Python备战28天