一、简介
蓝桥算法双周赛,是一项由蓝桥云课平台主办的算法编程竞赛活动。该竞赛旨在为广大编程爱好者和算法学习者提供一个交流学习的平台,通过解决各种算法问题,提升编程能力和算法思维。
进入链接:算法赛 - 蓝桥云课 (lanqiao.cn)https://www.lanqiao.cn/oj-contest/
二、详情
1.时间频率
蓝桥算法双周赛每两周举办一次,确保参赛者有足够的时间准备和参赛。
2.题目设置
每次比赛都会设置一系列精心设计的算法题目,题目难度各异,涵盖了搜索、动态规划、图论、数据结构等多个领域,以满足不同水平参赛者的需求。
3.比赛形式
比赛采用在线形式进行,参赛者需要在规定的时间内登录平台,完成题目并提交答案。平台会自动评分,并实时公布参赛者的成绩排名。
比赛实时排名 :
4.参赛对象
蓝桥算法双周赛面向全球编程爱好者和算法学习者开放,无论您是学生、教师还是职业开发者,都可以参与。
5.题目解析
以最近的第 13 场 小白入门赛 为解析例题: 第 13 场 小白入门赛 - 蓝桥云课 (lanqiao.cn)
(1)延续端午
题目:
代码 :
每次的第一题都是类似这样的题,比较简单,输出55即可。
import os
import sys
# 请在此输入您的代码
print(55)
(2)宣读数字
题目:
代码 :
def aa(N):
c = int(N ** 0.5) #计算了 N 的平方根, 判断正约数个数的奇偶性
if c * c == N:
return 'L' # 如果 c(即 N 的平方根的向下取整值)的平方等于 N,那么 N 是一个完全平方数,函数返回 'L'。
else:
return 'Q' # 否则,返回 'Q'。
T = int(input().strip()) #读取一个整数 T,并去除两端的空白字符。
for _ in range(T): #循环遍历所有的测试用例,它首先读取一个整数 N,然后调用 aa 函数并打印返回的结果。
N = int(input().strip())
print(aa(N))
(3)最大质因子个数
题目:
代码 :
t = int(input())
a = []
for i in range(2,100):
for j in range(2,i):
if i % j == 0:
break
else:
a.append(i)
for _ in range(t):
n = int(input())
res = 1
for i in range(len(a)):
res *= a[i]
if res > n:
break
print(i)
解释:
1.从用户那里获取一个整数t
,然后初始化一个空列表a
用于存储质数。
2.寻找质数
- 外层循环遍历从2到99的所有整数。
- 内层循环尝试用从2到
i-1
的所有整数去除i
。 - 如果
i
能被j
整除(即i % j == 0
),则i
不是质数,使用break
跳出内层循环。 - 如果内层循环“正常”结束(即没有遇到
break
),那么i
是一个质数,使用else
子句将其添加到a
列表中。
3.计算小于或等于给定数的最大质数乘积的质数个数
代码会执行t
次,每次:
- 从用户那里获取一个整数
n
。 - 初始化
res
为1,用于存储质数乘积。 - 遍历列表
a
中的所有质数,将它们乘到res
上。 - 如果
res
大于n
,则跳出内层循环。 - 最后,打印出
i
的值,这个值是在res
超过n
之前,乘到res
上的质数的个数。
(4) 物流选址
题目:
代码 :
import math
a=int(input())
for i in range(a):
c,d=map(int,input().split())
if d%c==0:
print(0)
elif d<c*2:
print(-1)
else:
f=d-c
t=f
for i in range(1,int(math.sqrt(f))+1):
if f%i==0:
q=int(f/i)
if i>c:
t=min(t,i-c)
if q>c:
t=min(t,q-c)
print(t)
解释:
-
初始化:
- 通过
a=int(input())
从用户处获取一个整数a
,表示将要输入的整数对(c, d)
的数量。
- 通过
-
循环处理整数对:
- 使用
for i in range(a):
循环a
次,每次处理一个整数对。
- 使用
-
读取整数对:
c,d=map(int,input().split())
从用户处读取一行输入,将其分割为两个整数,并分别赋值给c
和d
。
-
判断整数对的关系:
if d%c==0:
:检查d
是否能被c
整除。如果是,则输出0
,表示d
是c
的倍数。elif d<c*2:
:如果d
小于c
的两倍,则输出-1
,表示在这种情况下,无法找到一个整数(大于c
)使得它与c
的和等于d
(因为没有足够的空间在c
和d
之间)。else:
:如果上述两个条件都不满足,则执行以下步骤。
-
寻找满足条件的整数:
f=d-c
:计算d
和c
之间的差值。t=f
:初始化一个变量t
为f
,它将被用来存储满足条件的整数与c
的最小差值。- 使用一个循环
for i in range(1,int(math.sqrt(f))+1):
来检查从 1 到f
的平方根之间的所有整数i
是否是f
的因子。- 如果
i
是f
的因子,那么q=int(f/i)
也是f
的因子(且i
和q
可能是相等的)。 - 接下来,代码检查
i
和q
是否都大于c
。如果是,则更新t
为i-c
和q-c
中的较小值。这是因为我们正在寻找一个大于c
的整数,使得它与c
的和等于d
,即找到一个整数x
使得c + x = d
,这等价于找到x = d - c = f
的一个因子i
或q
,且这个因子大于c
。
- 如果
-
输出结果:
- 在循环结束后,
t
将包含满足条件的最小差值(即,找到的整数x
与c
的差值)。 print(t)
输出这个差值。
- 在循环结束后,
三、奖励
参与比赛就有实验豆奖励哦,还有机会成为幸运参与者,获得现金奖励!(幸运获得过一次)