当前位置: 首页 > news >正文

第十五届蓝桥杯PythonC组题解

A题:拼正方形

问题描述

给定一定数量的 2×21×1 的方块,求能拼出的最大正方形边长。

解题思路

  • 二分法:将奇数和偶数边长分开处理,通过二分法寻找最大满足条件的边长。
  • 面积验证:总方块面积需大于等于目标正方形面积。

代码实现

x, y = 7385137888721, 10470245  # 样例输入值,需替换为实际输入

def check(u):
    cnt = (u // 2) * (u // 2)
    cnt = min(cnt, x)
    return u * u <= cnt * 4 + y

# 处理奇数和偶数边长
l, r = 1, int(1e18)
while l < r:
    mid = (l + r + 1) // 2
    if check(mid + mid % 2):
        l = mid
    else:
        r = mid - 1
res1 = l + l % 2

l, r = 1, int(1e18)
while l < r:
    mid = (l + r + 1) // 2
    if check((mid + mid % 2) // 2):
        l = mid
    else:
        r = mid - 1
res2 = (l + l % 2) // 2

print(max(res1, res2))

B题:最小公倍数

问题描述

求2024和1024的最小公倍数。

解题思路

  • 公式法:利用 LCM(a, b) = a * b // GCD(a, b)

代码实现

import math
a, b = 2024, 1024
print(a * b // math.gcd(a, b))  # 输出:259072

C题:质数数位和

问题描述

求1到1000000中,数位和为23的质数个数。

解题思路

  1. 筛法求质数:埃拉托斯特尼筛法筛选质数。
  2. 数位和计算:遍历质数列表,计算每个数的数位和是否为23。

代码实现

def count_primes():
    max_num = 10**6
    is_prime = [True] * (max_num + 1)
    is_prime[0], is_prime[1] = False, False
    for i in range(2, int(max_num**0.5)+1):
        if is_prime[i]:
            for j in range(i*i, max_num+1, i):
                is_prime[j] = False
    primes = [i for i, val in enumerate(is_prime) if val]
    
    count = 0
    for p in primes:
        if sum(map(int, str(p))) == 23:
            count += 1
    return count

print(count_primes())  # 输出:5503(模拟赛样例)

D题:密码锁

问题描述

通过最少操作将密码锁拨动到目标密码,每次操作可选择单个或多个连续圆环拨动到同一数字。

解题思路

  • 动态规划:定义 dp[i][j] 为区间 [i,j] 的最少操作次数。
  • 区间合并:根据字符相同性合并操作。

代码实现

n = int(input())
s = list(map(int, input().strip()))
a = [0] * (n + 2)
for i in range(1, n+1):
    a[i] = s[i-1]

dp = [[0]*(n+2) for _ in range(n+2)]
for i in range(1, n+1):
    dp[i][i] = 1

for i in range(n, 0, -1):
    for j in range(i+1, n+1):
        dp[i][j] = dp[i][j-1] + 1
        if a[j] == a[j-1]:
            dp[i][j] = min(dp[i][j], dp[i][j-1])
        if a[j] == a[i]:
            dp[i][j] = min(dp[i][j], dp[i+1][j-1] + 1)
        for k in range(i, j):
            dp[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j])

print(dp[1][n])

E题:最大质因数

问题描述

求2024的最大质因数。

解题思路

  • 质因数分解:从2开始试除,记录最大质因数。

代码实现

def max_prime_factor(n):
    max_factor = 1
    i = 2
    while i*i <= n:
        while n % i == 0:
            max_factor = i
            n //= i
        i += 1
    return max_factor if n == 1 else n

print(max_prime_factor(2024))  # 输出:23

参考

  • CSDN博客-蓝桥杯题解
  • 洛谷题解专栏

相关文章:

  • 如何使用通义灵码完成PHP单元测试 - AI辅助开发教程
  • 数字内容体验案例解析与行业应用
  • 神经动力学系统与计算及AI拓展
  • MySQL的数据库性能分析利器Percona toolkit
  • 利用Ruby的Typhoeus编写爬虫程序
  • 快速上手Linux联网管理
  • 【Ansible自动化运维】四、ansible应用部署:加速开发到生产的流程
  • 接口和抽象类的区别
  • maven 依赖的优先级
  • 一个批量文件Dos2Unix程序(Microsoft Store,开源)
  • 【 Beautiful Soup (bs4) 详解】
  • 五、用例篇
  • 【二轮征稿】2025年IEEE第三届模式识别、机器视觉与人工智能国际会议(IEEE PRMVAI 2025)
  • 订阅不到topic排查方式
  • 上下文管理器需要实现哪两种方法以及相关应用
  • 进行性核上性麻痹患者,饮食 “稳” 健康
  • 消融实验_草稿
  • 使用setTimeout模拟setInterval
  • 山东省第二人民医院:基于DeepSeek的医疗AI智慧安全运营应用
  • 河北工程大学e2e平台,python
  • 站长之家素材网站/做网站关键词优化的公司
  • 北京建筑人才网/seo网络营销推广公司
  • 网站有些什么内容/成都百度提升优化
  • 织梦网站在css中怎样做导航/志鸿优化网官网
  • 做外链网站有哪些/可口可乐软文范例
  • 怎么快速做网站/全网整合营销推广方案