【蓝桥杯真题】 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博客

目录
相关文章
|
2月前
|
Python
蓝桥杯练习题(一):Python组之入门训练题
这篇文章是关于蓝桥杯Python组的入门训练题,包括Fibonacci数列、圆的面积、序列求和和A+B问题的具体代码实现和样例输出。
149 0
|
2月前
|
存储 机器学习/深度学习 算法
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
蓝桥杯Python编程练习题的集合,涵盖了从基础到提高的多个算法题目及其解答。
128 3
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
|
2月前
|
人工智能 Python
蓝桥杯练习题(四):Python组之历届试题三十题
关于蓝桥杯Python组历届试题的三十个练习题的总结,包括题目描述、输入输出格式、样例输入输出以及部分题目的解题思路和代码实现。
50 0
蓝桥杯练习题(四):Python组之历届试题三十题
|
2月前
|
存储 机器学习/深度学习 算法
蓝桥杯练习题(二):Python组之基础练习三十题
蓝桥杯Python编程练习题的集合,包含了三十个不同难度的编程题目,覆盖了基础语法、数据结构和算法等领域。
53 0
|
7月前
|
索引 Python 容器
【备战蓝桥杯】探索Python内置标准库collections的使用
【备战蓝桥杯】探索Python内置标准库collections的使用
103 1
|
7月前
|
开发者 Python
【备战蓝桥杯】如何使用Python 内置模块datetime去计算我与CSDN相遇的天数
【备战蓝桥杯】如何使用Python 内置模块datetime去计算我与CSDN相遇的天数
75 1
|
7月前
|
算法 测试技术 编译器
蓝桥杯-02-python组考点与14届真题
蓝桥杯-02-python组考点与14届真题
|
25天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
24天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
12天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
101 80