前言
先说结论,在我看来这届的难度比以往降了很多的档次,基本全程就是用模拟+暴力来做都能搞定,像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月,后来因为还有很多事我也没有坚持刷,包括考前一个周我完全没有复习算法,也就当天考前一小时看了一看,所以我本人的算法能力还是很菜的,提供的代码可能也并不一定对,不过我考前确实以为他会和往届一样那么难,结果有些出乎意料,这套题目和我的水平比较吻合,我的正常水平的话应该还可以在这套题难度的基础上多一些难度简单中等的算法。
大致要说的就这些,大家可以参考一下我的代码之类的,预祝大家取得好的成绩!!!