16届蓝桥杯Python赛道B组战果汇报

前言

先说结论,在我看来这届的难度比以往降了很多的档次,基本全程就是用模拟+暴力来做都能搞定,像15届的蓝桥杯编程部分让我现场做估计水平也就是2-3道左右,而这届只有一道没有做出来,难度差异在我看来还是很悬殊的。总的来说,两道填空,6道编程题,我只有第二道填空题和第三道编程题没有做出来,最后一题暴力肯定给不全。不说了直接看题和代码。

题目+代码

A. 攻击次数

n = 1
num = 0
i = 1
while num < 2025:
  num += 5
  if i % 2 != 0:
    num += 15
  elif i % 2 == 0:
    num += 2
  if i % 3 == 1:
    num += 2
  elif i % 3 == 2:
    num += 10
  elif i % 3 == 0:
    num += 7
  i += 1
print (i - 1)

答案算出来应该是103

B. 最长字符串

这道题我当时的思路过于麻烦,由于文件里单词最长为9,所以我原本打算创建9个哈希表,一个一个往后存,按这个思路写下去发现异常麻烦,最后就放弃了。大家想要文件的话可以私聊我,我单独发给你们。

C. LQ图形

w, h, v = map(int, input().split())
for i in range(h):
  print()
  for j in range(w):
    print('Q', end='')
for i in range(w):
  print()
  for j in range(v + w):
    print('Q', end='')

D.最多次数

s = list(input())
count = 0
for i in range(len(s) - 2):
  if s[i] == 'l' and s[i + 1] == 'q' and s[i + 2] == 'b':
    count += 1
    break
  i += 1
for i in range(len(s) - 2):
  if s[i] == 'l' and s[i + 1] == 'b' and s[i + 2] == 'q':
    count += 1
    break
  i += 1
for i in range(len(s) - 2):
  if s[i] == 'q' and s[i + 1] == 'l' and s[i + 2] == 'b':
    count += 1
    break
  i += 1
for i in range(len(s) - 2):
  if s[i] == 'q' and s[i + 1] == 'b' and s[i + 2] == 'l':
    count += 1
    break
  i += 1
for i in range(len(s) - 2):
  if s[i] == 'b' and s[i + 1] == 'l' and s[i + 2] == 'q':
    count += 1
    break
  i += 1
for i in range(len(s) - 2):
  if s[i] == 'b' and s[i + 1] == 'q' and s[i + 2] == 'l':
    count += 1
    break
  i += 1
print(count)

E. A * B Problem

这题有些难度,考场是实在没啥思路

F. 园艺

n = int(input())
nums = list(map(int, input().split()))
flag1 = True
for i in range(n - 1):
  if nums[i + 1] <= nums[i]:
    flag1 = False
gap = 2
while True:
  flag2 = True
  t = 0
  while True:
    if t + gap > n - 1:
      break
    if nums[t + gap] <= nums[t]:
      flag2 = False
    t += gap
  if flag2 == True:
    ans = t // gap + 1
    break
  t = 1
  while True:
    if t + gap > n - 1:
      break
    if nums[t + gap] <= nums[t]:
      flag2 = False
    t += gap
  if flag2 == True:
    ans = (t + 1) // gap
    break
  gap += 1
  
if flag1 == True:
  print(n)
else:
  print(ans)

G. 书架还原

n = int(input())
nums = list(map(int, input().split()))
count = 0
for i in range(n):
  while i != nums[i] - 1:
    t = nums[i]
    nums[i] = nums[t - 1]
    nums[t - 1] = t
    count += 1
print(count)

这道题我感觉我做的应该不对,但可能能过几个样例,我当时在分析的时候并没有分析出怎么样能够达到最少交换的效果,这个题本身我感觉很奇怪,我在尝试举例子的时候没发现交换次数会因为选择不同而发生变化,所以这个代码只是我用来交换的方法,至少试过几个例子都是没有问题的,但肯定是有什么问题我没有注意到。

H.异或求和

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

暴力来做的,应该只能过前40%的样例,当时实在没想到什么好的优化方法。

结语

大家看了这些题或者参加这次比赛的选手应该会发现这次题目难度真的降了很多,就我本人而言我是今年二月开始刷力扣和acwing,大概每天坚持刷了两个月,2月和3月,后来因为还有很多事我也没有坚持刷,包括考前一个周我完全没有复习算法,也就当天考前一小时看了一看,所以我本人的算法能力还是很菜的,提供的代码可能也并不一定对,不过我考前确实以为他会和往届一样那么难,结果有些出乎意料,这套题目和我的水平比较吻合,我的正常水平的话应该还可以在这套题难度的基础上多一些难度简单中等的算法。

大致要说的就这些,大家可以参考一下我的代码之类的,预祝大家取得好的成绩!!!

关于第十五蓝桥杯 Python 国赛 B 的 PDF 资料,目前并未提供具体的引用支持该资源的存在或下载方式[^1]。然而,在以往的比赛资料中可以发现一些类似的题目解析和代码示例,这些可能有助于准备比赛。 以下是基于过往经验的一些建议: ### 如何获取竞赛资料 通常情况下,官方会通过其官方网站或者授权的合作平台发布历年的真题及其解答文档。如果需要查找特定赛事的相关材料,可以通过以下途径尝试获得: 1. **访问官网**:前往蓝桥杯大赛的官方网站查询最新发布的试题与解析。 2. **教育机构分享**:部分培训机构会在课程中附带历年真题集作为学习素材。 3. **社区讨论区**:像CSDN博客、知乎等技术交流平台上常有参赛者上传自己的解法心得以及整理好的PDF文件供他人参考学习。 对于编程爱好者来说,理解并掌握解决实际问题的能力尤为重要。下面给出一段简单的Python程序用于演示字符串处理功能: ```python def string_processing(): user_input = input("请输入任意字符:") result = "" for char in user_input: if 'a'<=char<='z': result += chr(ord(char)-32) elif 'A'<=char<='Z': result+=chr(ord(char)+32) else: result+=char return result if __name__ == "__main__": processed_string=string_processing() print(processed_string) ``` 此段代码实现了大小写字母转换的功能, 用户输入一串文字后可得到相应的大写形式输出.
评论 80
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值