【蓝桥杯真题】 Python题解

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

👋蓝桥杯备战倒计时31天

👋快和小郑一起Python真题演练


题目来源:蓝桥云课

难度:⭐️


fcf7d7b0808f454ea8cf9fb978cbe0f9.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内出结果,暴力筛法有点慢,但也能出答案。

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

难度:⭐️⭐️⭐️


589f7d93bd7f4dbd9aa4f714ba254ab5.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)

灌溉 题目来自蓝桥云课

难度:⭐️⭐️⭐️


cd3816195e8e48ed95751c6386ff3dfb.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)

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

相关文章
|
10月前
|
存储 索引 Python
蓝桥杯系列2——python基本语法
蓝桥杯系列2——python基本语法
86 0
|
4月前
|
索引 Python 容器
【备战蓝桥杯】探索Python内置标准库collections的使用
【备战蓝桥杯】探索Python内置标准库collections的使用
77 1
|
4月前
|
开发者 Python
【备战蓝桥杯】如何使用Python 内置模块datetime去计算我与CSDN相遇的天数
【备战蓝桥杯】如何使用Python 内置模块datetime去计算我与CSDN相遇的天数
60 1
|
4月前
|
算法 测试技术 编译器
蓝桥杯-02-python组考点与14届真题
蓝桥杯-02-python组考点与14届真题
|
4月前
|
Python
第十三届蓝桥杯B组python(试题A:排列字母)
第十三届蓝桥杯B组python(试题A:排列字母)
50 0
|
4月前
|
人工智能 算法 测试技术
第十四届蓝桥杯第三期模拟赛 【python】(二)
第十四届蓝桥杯第三期模拟赛 【python】(二)
|
4月前
|
测试技术 Python
第十四届蓝桥杯第三期模拟赛 【python】(一)
第十四届蓝桥杯第三期模拟赛 【python】(一)
|
4月前
|
人工智能 算法 测试技术
第十四届蓝桥杯第二期模拟赛 【python】
第十四届蓝桥杯第二期模拟赛 【python】
|
10月前
|
机器学习/深度学习 开发者 索引
蓝桥杯系列6——python技巧
蓝桥杯系列6——python技巧
172 0
|
10月前
|
算法 Python
蓝桥杯系列4——python基础练习
蓝桥杯系列4——python基础练习
177 0