当前位置:   article > 正文

十五届蓝桥杯第一期模拟赛题单(C++、java、Python)_15届蓝桥青少steam c++

15届蓝桥青少steam c++

备战2024年蓝桥杯  省赛第一期模拟赛题单
备战Python大学A组

        第一题:字母数
        第二题:大乘积
        第三题:星期几
        第四题:清理水域
        第五题:列名
        第六题:最大联通
        第七题:信号覆盖
        第八题:附近最小
        第九题:第三小
        第十题:特殊日期
        第十一题:3个1
        第十二题:删字母
        第十三题:最小数位和
        第十四题:放苹果
        第十五题:对折次数
        第十六题:统计次数
        第十七题:电扇控制
        第十八题:最大查
        第十九题:最尖位置
        第二十题:最近分解


第一题:字母数

 解题思路:语法

【Python程序代码】

  1. def pd(s):
  2. for i in s:
  3. if i<'a' or i>'z':return False
  4. return True
  5. for i in range(2023,9999999):
  6. if pd(hex(i)[2:]):
  7. print(i)
  8. break
'
运行

最终结果:2730


第二题:大乘积

 解题思路:语法

 【Python程序代码】

  1. res = 0
  2. num = [99, 22, 51, 63, 72, 61, 20, 88, 40, 21, 63, 30, 11, 18, 99, 12, 93, 16, 7,53, 64, 9, 28, 84, 34, 96, 52, 82, 51, 77 ]
  3. for i in range(30):
  4. for j in range(i+1,30):
  5. if num[i]*num[j]>2022:
  6. res += 1
  7. print(res)
'
运行

最终结果:189


第三题:星期几

 解题思路:语法

【Python程序代码】

  1. w = int(input())
  2. n = int(input())
  3. if (w+n)%7==0:
  4. print(7)
  5. else:
  6. print((w+n)%7)

 第四题:清理水域

解题思路:语法

【Python程序代码】

  1. n,m = map(int,input().split())
  2. k = int(input())
  3. a = [[0]*(m+5) for _ in range(n+5)]
  4. for i in range(k):
  5. x1,y1,x2,y2 = map(int,input().split())
  6. a[x1][y1]+=1
  7. a[x1][y2+1]-=1
  8. a[x2+1][y1]-=1
  9. a[x2+1][y2+1]+=1
  10. res = 0
  11. for i in range(1,n+1):
  12. for j in range(1,m+1):
  13. a[i][j]+= a[i-1][j]+a[i][j-1]-a[i-1][j-1]
  14. if a[i][j]==0:res+=1
  15. print(res)

 第五题:列名

解题思路:语法(代码有小bug不过无关紧要)

【Python程序代码】

  1. res = ""
  2. t = 2022
  3. while t:
  4. tep = t%26
  5. if tep==0:
  6. res = 'Z' + res
  7. else:
  8. res = chr( ord('A')+tep-1 )+res
  9. t//=26
  10. print(res)
'
运行

 最终结果:BYT

第六题:最大联通

【问题描述】

        小蓝有一个 30 行 60 列的数字矩阵,矩阵中的每个数都是 0 或 1 。如果从一个标为 1 的位置可以通过上下左右走到另一个标为 1 的位置,则称两个位置连通。与某一个标为 1 的位置连通的所有位置(包括自己)组成一个连通分块。请问矩阵中最大的连通分块有多大?

解题思路:BFS连通性判断

【Python程序代码】

  1. from collections import *
  2. mp = [[0]*65]
  3. for i in range(30):
  4. tep = [0] + list(input())
  5. mp.append(tep)
  6. vis = [[0]*(65) for i in range(36)]
  7. res = 0
  8. dic = [(1,0),(0,1),(-1,0),(0,-1)]
  9. def bfs(x,y):
  10. q = deque()
  11. q.append((x,y))
  12. vis[x][y]=1
  13. k = 0
  14. while q:
  15. t = q.popleft()
  16. k += 1
  17. for i in range(4):
  18. nx,ny = t[0]+dic[i][0],t[1]+dic[i][1]
  19. if nx<1 or nx>30 or ny<1 or ny>60 :continue
  20. if vis[nx][ny] or mp[nx][ny]=='0':continue
  21. q.append((nx,ny))
  22. vis[nx][ny]=1
  23. return k
  24. for i in range(1,31):
  25. for j in range(1,61):
  26. if mp[i][j]=='1':
  27. res = max(res,bfs(i,j))
  28. print(res)
  29. print(148)

最终结果:148 


第七题:信号覆盖

解题思路:语法

【Python程序代码】

  1. N,M,n,R = map(int,input().split())
  2. vis = [[0]*(M+5) for _ in range(N+5)]
  3. def dis(x1,y1,x2,y2):
  4. return (x1-x2)**2 + (y1-y2)**2
  5. for i in range(n):
  6. x,y = map(int,input().split())
  7. for i1 in range(x-R,x+R+1):
  8. for i2 in range(y-R,y+R+1):
  9. if i1<0 or i1>N or i2<0 or i2>M:continue
  10. if dis(x,y,i1,i2)<=R**2:
  11. vis[i1][i2]=1
  12. res = 0
  13. for i in range(N+1):
  14. for j in range(M+1):
  15. if vis[i][j]:res+=1
  16. print(res)

第八题:附近最小

解析思路:直接从小开始枚举,不过这种枚举容易被卡,题目友好

【Python程序代码】

  1. n = int(input())
  2. a = list(map(int,input().split()))
  3. k = int(input())
  4. new = sorted([ (num,i) for i,num in enumerate(a) ] )
  5. st = [0]*(n)
  6. ans = [0]*(n)
  7. for num,i in new:
  8. for j in range(max(0,i-k),min(n,i+k+1)):
  9. if st[j]==0:
  10. st[j]=1
  11. ans[j]=num
  12. if sum(st)==n:break
  13. for i in range(n):
  14. print(ans[i],end=' ')

关于RMQ问题问题一题多解:朴素法、ST算法、单调队列、树状数组可以看蓝桥云--附近最小 


第九题:第三小

解析思路:语法

【Python程序代码】

  1. n = int(input())
  2. a = list(map(int,input().split()))
  3. tep = sorted(a[:3])
  4. print(tep[2],end=' ')
  5. for i in range(3,n):
  6. if a[i]<=tep[0]:
  7. tep[0],tep[1],tep[2]=a[i],tep[0],tep[1]
  8. elif tep[0]<a[i]<=tep[1]:
  9. tep[0],tep[1],tep[2]=tep[0],a[i],tep[1]
  10. elif tep[1]<a[i]<=tep[2]:
  11. tep[0],tep[1],tep[2]=tep[0],tep[1],a[i]
  12. #print(tep)
  13. print(tep[2],end=' ')

第十题:特殊日期

 解析思路:循环遍历找符合要求的,还好是填空题。

【Python程序代码】

  1. def pd(x):
  2. if x%400==0 or (x%100!=0 and x%4==0):return True
  3. return False
  4. res = 1
  5. yue = [0,31,28,31,30,31,30,31,31,30,31,30,31]
  6. for year in range(2000,2000000):
  7. if pd(year):yue[2]=29
  8. else: yue[2]=28
  9. for mon in range(1,13):
  10. if year%mon!=0:continue
  11. for day in range(1,yue[mon]+1):
  12. if year%mon==0 and year%day==0:res += 1
  13. print(res)
  14. print(35813063)

最终结果:35813063 


第十一题:3个1

 解析与思路:取决于Python好用的api,大水题

【Python程序代码】

  1. now = 0
  2. for i in range(1,99999999999):
  3. er = bin(i)[2:]
  4. er = [int(j) for j in er]
  5. if sum(er)==3:
  6. now+=1
  7. if now==23:
  8. print(i)
  9. break
'
运行

最终结果:70


第十二题:删字母

解析思路: 优先队列思想

【Python程序代码】

  1. n,m = map(int,input().split())
  2. s = input()
  3. result = []
  4. for i in range(len(s)):
  5. while m and result and result[-1]>s[i]:
  6. result.pop()
  7. m -= 1
  8. result.append(s[i])
  9. if m>0:print(''.join(result[:n-m]))
  10. else:print("".join(result))

第十三题:最小数位和

 解析与思路:枚举判断每一个就可以

【Python程序代码】

  1. res,num = 999999,0
  2. for i in range(8):
  3. tep = list(map(int,input().split()))
  4. for j in tep:
  5. kk = [int(_) for _ in str(j)]
  6. ws = sum(kk)
  7. if ws<res:
  8. res=ws
  9. num=j
  10. print(res,num)
  11. print(223321)

最终结果:223321 


 第十四题:放苹果

解析与思路:Soeasy

【Python程序代码】

  1. su = 2023
  2. x = 3*3*4
  3. print(su//x)
'
运行

 最终结果:56


 第十五题:对折次数

 解析与思路:见代码,不建议用除法,容易出错。

【Python程序代码】

  1. x = int(input())
  2. res = 0
  3. l = 1
  4. while l<x:
  5. l*=2
  6. res += 1
  7. print(res)
'
运行

 第十六题:统计次数

 解析与思路:练语法

【Python程序代码】

  1. s = input()
  2. for i in range(10):
  3. print(s.count(str(i)),end=' ')
'
运行

第十七题:电扇控制

 

解析与思路:语法

【Python程序代码】

  1. ans = ['low','mid','high']
  2. n = int(input())
  3. print(ans[n%3])
'
运行

第十八题:最大差

 解析思路:语法

【Python程序代码】

  1. from math import *
  2. n,m=30,20
  3. mp = [[0]*(m+5)]
  4. for i in range(30):
  5. tep = [0] + list(map(int,input().split()))
  6. def work(x,y):
  7. res = 0
  8. for i in range(x-5,x+6):
  9. for j in range(y-5,y+6):
  10. if i<1 or i>n or j<1 or j>m:continue
  11. if int(fabs(i-x))+int(fabs(j-y))<=5:
  12. res = max(res, int(fabs(mp[x][y]-mp[i][j])))
  13. return res
  14. ans = 0
  15. for i in range(1,31):
  16. for j in range(1,21):
  17. ans = max(ans,work(i,j))
  18. print(ans)
  19. print(8940)

 最终结果:8940


第十九题:相近分解

解析思路:枚举

【Python程序代码】

  1. from math import *
  2. s = set()
  3. for b in range(1,100):
  4. for a in range(b-2,b+3):
  5. for c in range(b-2,b+3):
  6. if int(fabs(a-c))<=2 and a*b*c>0:s.add(a*b*c)
  7. s = list(s)
  8. s.sort()
  9. print(s[22])
'
运行

 最终结果:120


第二十题:最尖位置

解析与思路: 语法

【Python程序代码】

  1. n = int(input())
  2. a = [0] + list(map(int,input().split()))
  3. res = 0
  4. for i in range(1,n+1):
  5. if i==1 or i==n:continue
  6. if a[i]<a[i-1] and a[i]<a[i+1]:
  7. res = max(res,(a[i-1]-a[i])*(a[i+1]-a[i]))
  8. print(res)
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/898046
推荐阅读
相关标签
  

闽ICP备14008679号