蓝桥算法双周赛

一、简介

      蓝桥算法双周赛,是一项由蓝桥云课平台主办的算法编程竞赛活动。该竞赛旨在为广大编程爱好者和算法学习者提供一个交流学习的平台,通过解决各种算法问题,提升编程能力和算法思维。

进入链接:算法赛 - 蓝桥云课 (lanqiao.cn)icon-default.png?t=N7T8https://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)

 解释:

  1. 初始化

    • 通过 a=int(input()) 从用户处获取一个整数 a,表示将要输入的整数对 (c, d) 的数量。
  2. 循环处理整数对

    • 使用 for i in range(a): 循环 a 次,每次处理一个整数对。
  3. 读取整数对

    • c,d=map(int,input().split()) 从用户处读取一行输入,将其分割为两个整数,并分别赋值给 c 和 d
  4. 判断整数对的关系

    • if d%c==0::检查 d 是否能被 c 整除。如果是,则输出 0,表示 d 是 c 的倍数。
    • elif d<c*2::如果 d 小于 c 的两倍,则输出 -1,表示在这种情况下,无法找到一个整数(大于 c)使得它与 c 的和等于 d(因为没有足够的空间在 c 和 d 之间)。
    • else::如果上述两个条件都不满足,则执行以下步骤。
  5. 寻找满足条件的整数

    • 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
  6. 输出结果

    • 在循环结束后,t 将包含满足条件的最小差值(即,找到的整数 x 与 c 的差值)。
    • print(t) 输出这个差值。

 三、奖励

奖励

实验豆:实验豆商城 - 蓝桥云课 (lanqiao.cn)

参与比赛就有实验豆奖励哦,还有机会成为幸运参与者,获得现金奖励!(幸运获得过一次)

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值