栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【蓝桥杯真题】 Python题解

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【蓝桥杯真题】 Python题解

蓝桥杯备战倒计时31天

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


题目来源:蓝桥云课

难度:⭐️

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

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


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

难度:⭐️⭐️⭐️ 

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

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

那就枚举几种情况:

当区间等于[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)

灌溉 题目来自蓝桥云课

难度:⭐️⭐️⭐️ 

 问题分析: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博客

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/756786.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号