2022蓝桥杯备赛python真题⼤联赛第1期蓝桥杯 python 2022寒假百校真题⼤联赛第1期
⾥⾯有真题的视频讲解。
本次联赛⽤的是。
代码填空题已经不考了,涉及到这⽅⾯的题型直接跳过去就可以。
研究⽣&⼤学A组
1.
mp = ["UDDLUULRUL", "UURLLLRRRU", "RRUURLDLRD", "RUDDDDUUUU", "URUDLLRRUU", "DURLRLDLRL", "ULLURLLRDU", "RDLULLRDDD","UUD DUDUDLL", "ULRDLUURRR"]
vis = [[0 for i in range(15)] for j in range(15)]    # 标记数组初始为0,为-1时表⽰可以出去
ans = 0
def f(x, y):
if 0 <= x <= 9 and 0 <= y <= 9:  # 该点在内部,统计访问次数
vis[x][y] += 1
if vis[x][y] >= 2:
return vis[x][y]
else:  # vis为-1则表明可以出去
vis[x][y] = -1
return -1
x0 = x
y0 = y
if mp[x][y] == 'U':
x0 -= 1
elif mp[x][y] == 'D':
x0 += 1
elif mp[x][y] == 'L':
y0 -= 1
elif mp[x][y] == 'R':
y0 += 1
vis[x][y] = f(x0, y0)
return vis[x][y]
if __name__ == '__main__':
ans = 0
for i in range(10):
for j in range(10):
f(i, j)
if vis[i][j] == -1:
ans += 1
print(ans)
2.
from collections import deque
mp = {}  # 字典标记状态是否已存在,{'字符串',对应最短步数}
que = deque()  # 队列,⽤于实现⼴度优先搜索
if __name__ == '__main__':
a1 = '912345678'    #⽤9表⽰空位置
a2 = '987654321'
que.append(a1)
mp[a1] = 0
f = 0
while len(que) != 0:
t = que.popleft()  # 字符串
t0 = list(t)  # 列表
x = mp[t]
i = t.index('9')
for j in range(-2, 3):  # 从队列⾸状态开始搜索。'9'与左右相邻2个位置依次交换,产⽣新状态            i0 = divmod(i+j+9, 9)[1]
t0[i], t0[i0] = t0[i0], t0[i]  # 交换元素
python 定义数组
tmp = ''.join(t0)  # 列表转为字符串
if tmp not in mp:  # 插⼊新状态
mp[tmp] = x + 1
que.append(tmp)
if tmp == a2:
f = 1
break
t0[i], t0[i0] = t0[i0], t0[i]  # 交换回来
if f == 1:
break
print(mp[a2])

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。