当前位置:   article > 正文

免费,Python蓝桥杯比赛历年真题--第14届蓝桥杯省赛真题(含答案解析和代码)_蓝桥杯python省赛题目14届

蓝桥杯python省赛题目14届

Python蓝桥杯比赛历年真题–第14届蓝桥杯省赛真题

前言

    Python中蓝桥杯算是含金量和难度最大的比赛之一,网上可以找到不少真题,不过要么字体模糊要么要钱解锁,而且大都是没答案和解析的,给学习者造成很大困扰。因此本文档打算整理历年STEMA、省赛、国赛真题卷和解析,供大家学习参考。
  • 1

一、选择题

在这里插入图片描述
答案:A
解析:使用“+”可以连接字符串,故答案为A。

在这里插入图片描述
答案:B
解析:str()为字符型,int()为整型,float()为字符型,list()为列表,故答案为B。

在这里插入图片描述
答案:A
解析:range()函数参数的随机数包含2,不包含20,步长为2即偶数,故答案为A。

在这里插入图片描述
答案:D
解析:sorted()方法会返回一个新的列表,所以为list类型,故答案为D。

在这里插入图片描述
答案:Python语言中,可以使用复数对象的real属性来获取复数的实部,使用复数对象的imag属性来获取复数的虚部,所以D错,故答案为D。

二、编程题

在这里插入图片描述
【参考程序】

n=int(input())
print(n+n)

  • 1
  • 2
  • 3
'
运行

在这里插入图片描述
【参考程序】

s=input()
print(s[0]+s[-1])

  • 1
  • 2
  • 3
'
运行

在这里插入图片描述
在这里插入图片描述
【参考程序】

# 导入itertools库中的combinations函数
from itertools import combinations
# 定义一个函数,用于检查一个整数是否为质数
def is_prime(x):
    if x<2 :
        return False
    for i in range(2,int(x**0.5+1)):
        if x%i==0 :
            return False
    return True
# 接收用户的三条输入:一个整数n,一个逗号分隔的整数列表ls,以及一个整数k
n=int(input())
ls=list(map(int,input().split(',')))
k=int(input())
# 用combinations函数生成ls中长度为k的所有子集组合,并计算它们的和,并将不同的和存储在一个set中。
s=set()
for i in combinations(ls,k):
    s.add(sum(i))
# 计算有多少个非质数和存在于set中,保存结果在ans2中
ans1=len(s)
ans2=0
for i in s:
    if not is_prime(i):
        ans2+=1
# 打印输出两个逗号分隔的数字,它们分别是非重复和的数量和不是质数的和的数量
print("{},{}".format(ans1,ans2))
# 导入itertools库中的combinations函数
from itertools import combinations
# 定义一个函数,用于检查一个整数是否为质数
def is_prime(x):
    if x<2 :
        return False
    for i in range(2,int(x**0.5+1)):
        if x%i==0 :
            return False
    return True
# 接收用户的三条输入:一个整数n,一个逗号分隔的整数列表ls,以及一个整数k
n=int(input())
ls=list(map(int,input().split(',')))
k=int(input())
# 使用generator表达式生成ls中长度为k的所有子集和,并将它们存储在set中。
s=set(sum(i) for i in combinations(ls,k))
# 统计set中非质数的数量并将结果保存在ans2中
ans1=len(s)
ans2=sum(1 for i in s if not is_prime(i))
# 打印输出两个逗号分隔的数字,它们分别是非重复和的数量和不是质数的和的数量
print("{},{}".format(ans1,ans2))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

在这里插入图片描述
在这里插入图片描述
【参考程序】

# 接收用户输入一个整数n,以及逗号分隔的x和y值  
n=int(input())  
x,y=map(int,input().split(','))  
# 生成一个(n+1)x(n+1)的二维列表,初始值全部为0,并将第一个元素设为1。  
my_list=[[0 for i in range(n+1)] for j in range(n+1)]  
my_list[1][1]=1  
# 使用杨辉三角算法计算my_list中的值  
for i in range(2,n+1):  
    for j in range(1,i+1):  
        my_list[i][j]=my_list[i-1][j-1]+my_list[i-1][j]  
# 计算ans1作为x,y处的杨辉三角值  
ans1=my_list[x][y]  
# 计算ans2作为第y列的所有值之和  
ans2=0  
for i in range(1,n+1):  
    ans2+=my_list[i][y]  
# 打印输出两个逗号分隔的数字,分别代表x,y处的杨辉三角值和第y列的所有值之和  
print("{},{}".format(ans1,ans2))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

在这里插入图片描述
【参考程序】

#接收墙的列数N和每列砖块数量列表1s
N=int(input())
ls = list(map(int,input().split()))
#初始化最大矩形面积result和单调栈stack
result =0
stack =[-1]
#遍历每列砖块
for i in range(N):
#当前单调栈中的所有列的高度都不高于当前列,生成像“0111200222”的序列
    while stack[-1]!=-1 and ls[stack[-1]]>= ls[i]:
        h= ls[stack.pop()] #弹出高度h
        w=i- stack[-1]-1 #从之前的位置到当前位置可以形成一个宽为w,高为h的矩形
        result =max(result,h*w) #更新最大值
    # #将当前列的索引号入栈
    stack.append(i)
#处理剩下的单调栈中的列
while stack[-1]!= -1:
    h=ls[stack.pop()]
    #从之前的位置到尾端可以形成一个宽为w,高为h的矩形
    w=len(ls)-stack[-1]-1
    result =max(result,h*w)
print(result)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

在这里插入图片描述
在这里插入图片描述

【参考程序】

#读取输入数据
# 房间数量
n = int(input())
rooms =[]
#记录每个房间内的传送门编号
for i in range(n):
    rooms.append(list(map(int,input().split(','))))
a,b= map(int,input().split('')) # 目标房间A和B
#构建每个传送门所连接房间的关系表#f传送门编号:可到达的房间列表]
gates ={}   #传送门编号:可到达的房间列表]
for i in range(n):
    for gate in rooms[i]:
        if gate not in gates:
            gates[gate] = []
        gates[gate].append(i)
print(gates)
#使用BFS搜索,从房间A寻找到达房间B的最短路程
#起点A的房间编号入队列
queue =[a-1]
dist =[-1]*n#记录每个房间到起点A的距离初始化为-1
dist[a-1]=0 # 起点A到自身的距离为0
while queue:
    u= queue.pop(8)
    for gate in rooms[u]:
        for v in gates[gate]:#如果该房间还没有被访问过
            if dist[v]== -1:
                dist[v]= dist[u]+ 1
                if v == b-1:#如果已经找到目标房间B,则立即返回最短路程
                    print(dist[v])
                    exit()
                queue.append(v)
#如果队列为空还没有找到目标房间B,则说明无法到达
print(-1)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号