备战2024年蓝桥杯 省赛第一期模拟赛题单
备战Python大学A组
第一题:求余
第二题:灌水
第三题:区间最大和
第四题:最多约数
第五题:循环位移
第六题:最后的元音
第七题:公约移动
第八题:转换次数
第九题:最大落差
第十题:字符显示
第十一题:数位和相等
第一题:求余
解题思路:语法
【Python程序代码】
print(pow(2,2023,1000))
最终结果:608
第二题:灌水
解题思路:BFS
【Python程序代码】
from collections import *
vis = [[0]*100 for _ in range(100)]
mp = [[0]*32]
for i in range(30):
tep = [0] + list(input())
mp.append(tep)
mp[1][1]=2
dic = [(1,0),(0,1),(-1,0),(0,-1)]
def bfs():
q=deque()
q.append((1,1))
vis[1][1]=1
while q:
t = q.popleft()
for i in range(4):
nx,ny = t[0]+dic[i][0] , t[1]+dic[i][1]
if nx<1 or nx>30 or ny<1 or ny>40:continue
if mp[nx][ny]!='0' or vis[nx][ny]:continue
q.append((nx,ny))
vis[nx][ny]=1
res = 0
bfs()
for i in range(1,31):
for j in range(1,41):
if vis[i][j]:res += 1
print(res)
for i in range(1,31):
tep = [str(j) for j in vis[i][1:41]]
print("".join(tep))
print(541)
最终结果:541
第三题: 区间最大和
解题思路:前缀和
【Python程序代码】
n,k = map(int,input().split())
a = [0] + list(map(int,input().split()))
s = [0]*(n+10)
for i in range(1,n+1):
s[i] = s[i-1]+a[i]
res = 0
for i in range(k,n+1):
res = max(res,s[i]-s[i-k])
print(res)
第四题: 最多约数
解题思路:语法
【Python程序代码】
def solve(x):
res = 0
i=1
while i*i<=x:
if x%i==0:
res += 1
if x//i>i:
res += 1
i += 1
return res
num,cnt = 0,0
for i in range(6):
nums = list(map(int,input().split()))
for j in nums:
cnt1 = solve(j)
if cnt1>cnt:
cnt = cnt1
num = j
print(num)
最终结果: 901440
第五题: 循环位移
解题思路:语法
【Python程序代码】
x= input()
print(x[1:]+x[0])
第六题: 最后的元音
解题思路:语法
【Python程序代码】
s = input()
p = ['a','e','i','o','u']
for i in range(len(s)-1,-1,-1):
if s[i] in p:
print(s[i])
break
第七题:公约移动
解题思路:BFS
【Python程序代码】
from math import *
from collections import *
n,m = map(int,input().split())
mp = [[0]*(m+1)]
for i in range(n):
tep = [0] + list(map(int,input().split()))
mp.append(tep)
r,c = map(int,input().split())
vis = [[0]*(m+5) for _ in range(n+5)]
dic = [(1,0),(0,1),(-1,0),(0,-1)]
def bfs():
q = deque()
q.append((r,c))
vis[r][c]=1
while q:
t = q.popleft()
for i in range(4):
nx,ny = t[0]+dic[i][0],t[1]+dic[i][1]
if nx<1 or nx>n or ny<1 or ny>m:continue
if vis[nx][ny] or gcd(mp[nx][ny],mp[t[0]][t[1]])==1:continue
vis[nx][ny]=1
q.append((nx,ny))
bfs()
res= 0
for i in range(1,n+1):
for j in range(1,m+1):
if vis[i][j]:res += 1
print(res)
第八题:转换次数
解题思路:语法
【Python程序代码】
x = int(input())
while x>=10:
tep =str(x)
tep = [int(i) for i in tep]
now = 1
for i in tep:
if i!=0:now*=i
x = now
print(x)
第九题:最大落差
解题思路:语法
【Python程序代码】
n = int(input())
a = [0] + list(map(int,input().split()))
re = 0
for i in range(1,n):
if a[i]>a[i+1]:
re = max(re,a[i]-a[i+1])
print(re)
第十题:字符显示
解题思路:语法
【Python程序代码】
print(36*30//10)
最终结果:108
第十一题:数位相等
解题思路:语法
【Python程序代码】
now = 0
for i in range(1,1000000):
er1 = bin(i)[2:]
ba1 = oct(i)[2:]
er2 = [int(j) for j in er1]
ba2 = [int(j) for j in ba1]
if sum(er2)==sum(ba2):
now+=1
#print(i)
if now==23:
print(i)
break
最终结果:4169