2022第十三届蓝桥杯PythonB组

A排列字母

在这里插入图片描述

s='WHERETHEREISAWILLTHEREISAWAY'
s=list(s)
s.sort()
print(''.join(s))
#AAAEEEEEEHHHIIILLRRRSSTTWWWY

B寻找整数

在这里插入图片描述

答案:2022040920220409

思路:中国剩余定理应该能做,不过比赛的时候记不清咋写的了,就暴力一波。注意,一个个累加是不行的,自己用python算一下pow(10,17)就知道了。我当时选了最后五个数,因为这几个比较大,先找到能同时满足这五个的数的规律:

tmp.py

i=1
while True:
    flag=True
    if i%49!=46:
        flag=False
    if i%48!=41:
        flag=False
    if i%47!=5:
        flag=False
    if i%46!=15:
        flag=False
    if i%45!=29:
        flag=False
    if flag:
        print(i)
    i+=1

跑出来前几个就够了:4772009, 42909689, 81047369, 119185049,157322729, 195460409, 233598089……不用说肯定是等差数列,再稍微验证一下y=38137680*x+4772009

然后枚举那个x的值,再遍历前面的是否满足即可,这样就能跑出来:

B.py

mod = [(2, 1), (14, 11), (26, 23), (38, 37),
       (3, 2), (15, 14), (27, 20), (39, 23),
       (4, 1), (16, 9), (28, 25), (40, 9),
       (5, 4), (17, 0), (29, 16), (41, 1),
       (6, 5), (18, 11), (30, 29), (42, 11),
       (7, 4), (19, 18), (31, 27), (43, 11),
       (8, 1), (20, 9), (32, 25), (44, 33),
       (9, 2), (21, 11), (33, 11), (45, 29),
       (10, 9), (22, 11), (34, 17), (46, 15),
       (11, 0), (23, 15), (35, 4), (47, 5),
       (12, 5), (24, 17), (36, 29), (48, 41),
       (13, 10), (25, 9), (37, 22)]
i = 0
cha = 38137680
while True:
    flag = True
    num = cha*i+4772009
    for x, y in mod:
        if num % x != y:
            flag = False
            break
    if flag:
        print(num)
        break
    i += 1
# 2022040920220409

C纸张尺寸

在这里插入图片描述
没啥好说的,长边整除2即可

name = input()
A0x, A0y = 1189, 841
if name == 'A0':
    print(A0x)
    print(A0y)
else:
    cnt = int(name[1])
    for i in range(cnt):
        A0x, A0y = A0y, A0x//2
    print(A0x)
    print(A0y)

D数位排序

在这里插入图片描述
在这里插入图片描述

只要会用cmp_to_key就不难

from functools import cmp_to_key


def cmp(x, y):
    hx = getHe(x)
    hy = getHe(y)
    if hx == hy:
        return x-y
    return hx-hy


def getHe(n):
    res = 0
    while n > 0:
        res += n % 10
        n //= 10
    return res


n = int(input())
m = int(input())
num = [i for i in range(1, n+1)]
num.sort(key=cmp_to_key(cmp))
print(num[m-1])

E蜂巢

在这里插入图片描述

在这里插入图片描述

没思路

F消除游戏

在这里插入图片描述
在这里插入图片描述
不确定

s = list(input())
pre = s
f = False
for i in range(pow(2, 64)):
    flag = [False]*len(s)
    for j in range(1, len(s)-1):
        if s[j] == s[j-1] and s[j] != s[j+1]:
            flag[j] = True
            flag[j+1] = True
        if s[j] != s[j-1] and s[j] == s[j+1]:
            flag[j-1] = True
            flag[j] = True
    for j in range(len(flag)):
        if flag[j]:
            s[j] = ''
    s = list(''.join(s))
    if len(s) == 0:
        f = True
        break
    if pre == s:
        break
    pre = s


if f:
    print('EMPTY')
else:
    print(''.join(s))

G全排列的价值

在这里插入图片描述
在这里插入图片描述

写了一点,就不放出来丢人了

H技能升级

在这里插入图片描述
在这里插入图片描述

求最大值那边应该可以用大顶堆优化一下,时间复杂度可以降到nlogn,比赛时忘了优化,呜呜呜

from math import ceil

n, m = map(int, input().split())
a = [0]
b = [0]
dp = [0]*(m+1)
for i in range(n):
    x, y = map(int, input().split())
    a.append(x)
    b.append(y)

for j in range(1, m+1):
    index = 0
    for k in range(1, n+1):
        if a[k] > a[index]:
            index = k
    dp[j] = dp[j-1]+a[index]
    a[index] -= b[index]
    a[index] = max(a[index], 0)

print(dp[m])

I最长不下降子序列

在这里插入图片描述
在这里插入图片描述
写了一点,就不放出来丢人了

J最优清零方案

在这里插入图片描述
在这里插入图片描述

### 关于第十三届蓝桥杯 Python B的信息 关于第十三届蓝桥杯 Python B的具体试题解析和答案,目前并未提供直接的详细资料[^1]。然而,可以基于以往的比赛经验和公开资源推测其可能涉及的内容范围以及解答思路。 #### 赛事背景 蓝桥杯大赛作为全国性的编程竞赛活动,每年都会吸引大量学生参与。其中,Python B主要面向本科院校的学生设计,考察的知识点涵盖了基础算法数据结构、字符串处理等多个方面。相较于其他语言(如C++),Python因其简洁易读的特点,在比赛中更注重逻辑思维能力而非复杂的语法掌握。 #### 可能覆盖的主要知识点 以下是根据往届比赛总结出来的常见考点: - **基本运算与控制流** 这类题目通常比较简单,比如计算某个数列的最大值最小值或者判断质数等问题。 - **数操作** 需要熟练运用列表(lists),元(tuples)等容器类型完成特定任务,例如查找子序列最大和之类的经典问题[^2]。 - **递归函数的应用** 掌握如何编写有效的递归程序解决实际问题是必要的技能之一;常见的例子有汉诺塔移动过程模拟或是斐波那契数列求解等等。 - **动态规划初步理解** 对一些稍微复杂一点的任务需要用到动规方法来降低时间复杂度从而提高效率。像背包问题就是典型代表案例[^3]。 下面给出几个假设性样例供参考: ```python # 示例一:简单循环实现累加功能 def sum_n(n): total = 0 for i in range(1, n+1): total +=i return total print(sum_n(10)) # 输出应该是55 ``` ```python # 示例二:寻找最长公共前缀 from typing import List def longestCommonPrefix(strs:List[str])->str: if not strs:return "" prefix=strs[0] count=len(prefix) for s in strs[1:]: while prefix != s[:count]: count -=1 prefix=prefix[:count] if not prefix :return "" return prefix words=["flower","flow","flight"] result=longestCommonPrefix(words) if result !="": print(f'"{result}" is the common prefix.') else : print('There is no common prefix') ``` 以上仅为示例性质代码片段,并不代表真实考题内容。如果想要获取更加权威准确的历史真题及其官方标准答案,则建议访问官方网站查询历年赛事文档下载链接地址[^4]。
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

h0l10w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值