十五届蓝桥杯第二期模拟赛题单(C++、java、Python)

备战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

猜你喜欢

转载自blog.csdn.net/w2563216521/article/details/134866275