2025蓝桥杯pythonB记录

本人菜鸡一枚,本帖子仅用来记录我自己本次蓝桥杯的思路和代码,如有错误请各位大佬指正。

试题A: 攻击次数

简单的模拟,记录life为2025,根据题目信息对各英雄攻击值进行取余计算即可,算出来结果是103

暴力+模拟

life = 2025   #生命
time = 1      #回合

while life > 0:
    life -= 5   # 1英雄攻击
    
    if time % 2 == 1: #2
        life -= 15
    else:
        life -= 2

    if time % 3  == 1: #3
        life -= 2
    elif time % 3 == 2:
        life -= 10
    elif time % 3 == 0:
        life -= 7

    print("第",time,"回合:",life)

    if life > 0:
        time += 1

### ans = 103

试题B: 最长字符串

这里可以直接暴力求解,根据定义单个字母一定是优美字符串,根据字符长度划分不同的字符组,首先求得长度为2的字符串中符合优美的,也就是说其首字母中,在单字符串集合中必定存在,以此类推,层层计算。最后根据字典序排序即为答案。答案为:afplcu

暴力+哈希

word2 = []
word3 = []
word4 = []
word_f = []
word_five = []
word_s = []
word_seven = []

for i in range(50000):
    n = input()
    if len(n) == 2:
        word2.append("".join(sorted(n)))
    if len(n) == 3:
        word3.append(n)
    if len(n) == 4:
        word_f.append(n)
    if len(n) == 5:
        word_five.append(n)
    if len(n) == 6:
        word_s.append(n)
    if len(n) == 7:
        word_seven.append(n)

for i in word3:
    if "".join(sorted(i[:-1])) in word2:
        
        word4.append("".join(sorted(i)))

print(word4)
word5 = []
for i in word_f:
    if "".join(sorted(i[:-1])) in word4:
        word5.append("".join(sorted(i)))
print(word5)

word6 = []
for i in word_five:
    if "".join(sorted(i[:-1])) in word5:
        word6.append("".join(sorted(i)))
print(word6)

word7 = []
word8 = []
for i in word_s:
    if "".join(sorted(i[:-1])) in word6:
        word8.append(i)
        word7.append("".join(sorted(i)))

print(sorted(word8))
print("sort")
print(word7)

## afplcu

试题C: LQ 图形

又是一道简单的模拟题,根据题目要求,输出图形高为h+w,前h高时,宽为w,后面宽为w+v,循环模拟输出即可。

模拟+循环

w , h ,v = list(map(int,input().split()))
for i in range(w+h):
    if i < h:
        print("Q"*w)
    else:
        print("Q"*(w+v))

试题D: 最多次数

这题我写的时候用的是贪心的思想,维护一个长度为3的滑动窗口,使用哈希映射窗口的字符是否符合题意,符合就ans += 1,窗口后滑三格,否则窗口后滑一格,继续判断。

贪心+滑动窗口+哈希

s = list(input())
love = {"lqb","lbq","qlb","qbl","blq","bql"}
love_new = []

for i in love:
    love_new.append(list(i))

if len(s) < 3:
    print(0)
    
else:
    ans = 0
    l = 0
    r = 2
    while r < len(s):
        window = s[l:r+1]
        if window in love_new:
            ans += 1
            l += 3
            r += 3
        else:
            l += 1
            r += 1
    print(ans)

试题E: A ·B Problem

这道题我对bp不熟悉,只能使用暴力求解,应该能过部分样例,直接模拟四个数,循环判断,符合条件则ans += 1。

纯暴力+模拟

L = int(input())
ans = 0
for i in range(1,L+1):
    for j in range(1,L+1):
        for k in range(1,L+1):
            for g in range(1,L+1):
                if i * k + j * g <= L:
                    ans += 1
print(ans)

试题F: 园艺

这题没时间下了最后写了个random函数随机输出骗分。

投降

n = int(input())
no = []
h = list(map(int,input().split()))
import random

if sorted(h) == h:
    print(n)
else:
    print(random.randint(0,n))

试题G: 书架还原

这里我用的贪心算法。每次操作都把当前位置上编号不对的书交换到正确的位置,这样就能保证用最少的操作次数让书架上的书恢复到正确排列。同时用字典映射书本的当前位置,提高查询效率。

贪心+哈希

n = int(input())
a = list(map(int, input().split()))
i = 1
ans = 0
a_dict = {}

for sam in range(n):
    a_dict[a[sam]] = sam  # 记录位置

while i <= n:
    if a[i - 1] == i:
        i += 1
    else:
        ans += 1
        local = a_dict.get(i)  # 找到位置,交换
        t = a[i - 1]
        a[i - 1] = a[local]
        a[local] = t
        a_dict[a[i - 1]] = i - 1
        a_dict[a[local]] = local

        i += 1
print(ans)

试题H: 异或和

这里直接纯暴力计算,写了一个双循环求解,应该能过部分样例。

暴力+模拟

n = int(input())
a = list(map(int,input().split()))
ans = 0
for i in range(n):
    for j in range(i+1,n):
        ans += (a[i]^a[j])*(j - i)
print(ans)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值