2023年5月第14届蓝桥杯Python编程青少组(省赛)真题(含答案)_第1页
2023年5月第14届蓝桥杯Python编程青少组(省赛)真题(含答案)_第2页
2023年5月第14届蓝桥杯Python编程青少组(省赛)真题(含答案)_第3页
2023年5月第14届蓝桥杯Python编程青少组(省赛)真题(含答案)_第4页
2023年5月第14届蓝桥杯Python编程青少组(省赛)真题(含答案)_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2023年5月第14届蓝桥杯Python编程青少组(省赛)真题(含答案)一、单选题。1.执行以下代码,输出的结果是?()。lst="abc"print(lst+lst)A.abcabcB.abcC.lst+lstD.abc+abc标准答案:A。2.导入random标准库,执行print(random.randrange(2,20,2)语句,可能输出的结果是?()。A.2B.5C.13D.20标准答案:A。3.以下关于Python中复数描述,错误的是?()。A.复数可以看作二元有序浮点数(x,y)B.实部和虚部都是浮点数C.虚数部分的后缀可以是“j”也可以是“J”。D.已知复数a,可以使用real获得虚数部分。标准答案:D。4.下列选项哪一个是转为整数的函数?()。A.str()B.int()C.float()D.list()标准答案:B。5.执行以下代码,输出的结果是?()。age={16,18,7}print(type(sorted(age)))A.<class'set'>B.<class'int'>C.<class'str'>D.<class'list'>标准答案:D。二、编程题。6.题。题目描述:(注,input()输入函数的括号中不允许添加任何信息)。编程实现:给定一个正整数N,计算出N+N的值。例如:N=4,4+4的值为8(8=4+4)。输入描述:输入一个正整数N。输出描述:输出N+N的值。样例输入:3样例输出:6参考程序:n=int(input())print(n+n)7.题。题目描述:(注,input()输入函数的括号中不允许添加任何信息)。编程实现:给定一个只包含小写字母的字符串S(S长度≥3),请输出字符串S的第一个字符和最后一个字符。例如:当S=“abc”,abc的第一个字符为a,最后一个字符为c,故输出ac。输入描述:输入一个只包含小写字母的字符串S(S长度≥3)。输出描述:输出字符串S的第一个字符和最后一个字符,两个字符之间没有空格及其他字符。样例输入:abc样例输出:ac参考程序:s=input()print(s[0]+s[-1])8.题。题目描述:(注,input()输入函数的括号中不允许添加任何信息)。提示信息:合数:合数指自然数中除了能被1和本身整除外,还能被其它正整数整除的数。例如4,4除了能被1和4整除,还可以被2整除。编程实现:小明收藏了N(2≤N≤25)个数字币,每个数字币上都有一个面值(面值可以重复)。从数字币中任选K(2≤K≤N)个,有多种选法,请将每次选择的数字币上的面值累加,然后解决以下两个问题。问题1:累加的和中有多少种不同的结果。问题2:累加的和中有多少个不同的合数。例如:N=5,K=3,5个数字币上的面值分别为2、1、4、5、3,任选3个数字币,有10种选法,将每种选法上的面值累加:2+1+4=7、2+1+5=8、2+1+3=6、2+4+5=11、2+4+3=9、2+5+3=10、1+4+5=10、1+4+3=8、1+5+3=9、4+5+3=12。其中累加的和中有7种不同的结果,分别是7、8、6、11、9、10、12。累加的和中有5个不同的合数,分别是8、6、9、10、12。输入描述:第一行输入一个正整数N(2≤N≤25),表示数字币的个数。第二行输入N个正整数(1≤正整数≤1000),表示数字币上的面值,正整数之间以一个英文逗号隔开。第三行输入一个正整数K(2≤K≤N),表示所要选取的数字币个数。输出描述:输出两个整数,分别表示累加的和中不同结果的个数以及累加的结果中不同合数的个数,两个整数之间以一个英文逗号隔开。样例输入:52,1,4,5,33样例输出:7,5参考程序:fromitertoolsimportcombinations#定义一个函数,用于检查一个整数是否为质数。defis_prime(x):ifx<2:returnFalseforiinrange(2,int(x**0.5+1)):ifx%i==0:returnFalsereturnTruen=int(input())ls=list(map(int,input().split(',')))k=int(input())#用combinations函数生成ls中长度为k的所有子集组合,并计算它们的和,并将不同的和存储在一个set中。s=set()foriincombinations(ls,k):s.add(sum(i))#计算有多少个非质数和存在于set中,保存结果在ans2中。ans1=len(s)ans2=0foriins:ifnotis_prime(i):ans2+=1print("{},{}".format(ans1,ans2))9.题。题目描述:(注,input()输入函数的括号中不允许添加任何信息)。提示信息:杨辉三角就是一个用数排列起来的三角形(如下图),杨辉三角规则如下:1)每行第一个数和最后一个数都为1,其它每个数等于它左上方和右上方的两数之和。2)第n行有n个数。注意:“列”指的是如图所标注的斜列。编程实现:小青对杨辉三角的特点和规律研究得很明白,现要考察你对杨辉三角的熟悉程度,首先告知你这是一个N行的杨辉三角,然后又告知了两个数值X和Y(X表示第几行,Y表示第几列),让你根据杨辉三角的特点和观察到的规律解决以下两个问题。1)第X行第Y列对应的数是多少。2)求出N行的杨辉三角中第Y列中所有数的和。例如:N=5,5行的杨辉三角如下图:X=5,Y=3,第5行第3列对应的数为6;第3列中所有数的和为10(10=6+3+1)。输入描述:第一行输入一个正整数N(2≤N≤30),表示杨辉三角的行数。第二行输入两个正整数X和Y(1≤Y≤X≤N),分别表示第X行和第Y列,正整数之间以一个英文逗号隔开。输出描述:输出两个整数,分别表示N行的杨辉三角中第X行Y列对应的数,及第Y列上所有数的和,两个整数之间以一个英文逗号隔开。样例输入:55,3样例输出:6,10参考程序:#接收用户输入一个整数n,以及逗号分隔的x和y值。n=int(input())x,y=map(int,input().split(','))#生成一个(n+1)x(n+1)的二维列表,初始值全部为0,并将第一个元素设为1。my_list=[[0foriinrange(n+1)]forjinrange(n+1)]my_list[1][1]=1#使用杨辉三角算法计算my_list中的值。foriinrange(2,n+1):forjinrange(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=0foriinrange(1,n+1):ans2+=my_list[i][y]print("{},{}".format(ans1,ans2))10.题。题目描述:(注,input()输入函数的括号中不允许添加任何信息)。编程实现:工人砌了一面奇特的砖墙,该墙由N列砖组成(1≤N≤106),且每列砖的数量为Ki(1≤Ki≤104,相邻两列砖之间无缝隙),每块砖的长宽高都为1。小蓝为了美化这面墙,需要在这面墙中找到一块面积最大的矩形用于涂鸦,那么请你帮助小蓝找出最大矩形,并输出其面积。例如:N=6,表示这面墙有6列,每列砖的数量依次为3、2、1、5、6、2,如下图:图中虚线部分是一块面积最大的矩形,其面积为10。输入描述:第一行输入一个正整数N(1≤N≤10^6),表示这面砖墙由几列砖组成。第二行输入N个正整数Ki(1≤Ki≤10^4),表示每列砖的数量,正整数之间以一个空格隔开。输出描述:输出一个正整数,表示最大矩形的面积。样例输入:6321562样例输出:10参考程序:#接收墙的列数N和每列砖块数量列表ls。N=int(input())ls=list(map(int,input().split()))#初始化最大矩形面积result和单调栈stack。result=0stack=[-1]#遍历每列砖块。foriinrange(N):#当前单调栈中的所有列的高度都不高于当前列,生成像“0111200222”的序列。whilestack[-1]!=-1andls[stack[-1]]>=ls[i]:h=ls[stack.pop()]#弹出高度h。w=i-stack[-1]-1#从之前的位置到当前位置可以形成一个宽为w,高为h的矩形。result=max(result,h*w)#更新最大值。#将当前列的索引号入栈。stack.append(i)#处理剩下的单调栈中的列。whilestack[-1]!=-1:h=ls[stack.pop()]w=len(ls)-stack[-1]-1#从之前的位置到尾端可以形成一个宽为w,高为h的矩形。result=max(result,h*w)print(result)11.题。题目描述:(注,input()输入函数的括号中不允许添加任何信息)。编程实现:在一个神奇空间里有N个房间,房间从1到N编号,每个房间可能有一个或多个传送门,每个传送门都有一个编号,如果相同编号的传送门同时出现在多个房间中,表示这些房间可以互通。给定两个房间的编号A和B,请找出从房间A到达房间B最少需要经过几个传送门。例如:N=3,3个房间中传送门的编号分别为:房间1:1、4、6。房间2:2、3、4,8。房间3:3、6、9。其中房间1和房间2互通,共用4号传送门;房间1和房间3互通,共用6号传送门;房间2和房间3互通,共用3号传送门;当A=1,B=2,从房间1到达房间2,共有两种路线:路线1:从房间1通过4号传送门进入房间2,共经过1个传送门。路线2:从房间1通过6号传送门进入房间3,再从房间3通过3号传送门进入房间2,共经过2个传送门;故从房间1到达房间2最少需要经过1个传送门。输入描述:第一行输入一个正整数N(2≤N≤20),表示房间数量。接下来输入N行,每行包含多个正整数(1≤正整数≤100),第2行到第N+1行依次表示1到N号房间内所有传送门的编号,正整数之间以一个英文逗号隔开。最后一行输入两个正整数A和B(1≤A≤N,1≤B≤N,且A≠B),表示两个房间的编号,正整数之间以一个英文逗号隔开。输出描述:输出一个整数,表示从房间A到达房间B最少需要经过几个传送门,如果房间A不能到达房间B,则输出-1。样例输入:31,4,62,3,4,83,6,91,2样例输出:1参考程序:#读取输入数据。n=int(input())#房间数量。rooms=[]#记录每个房间内的传送门编号。foriinrange(n):rooms.append(list(map(int,input().split(','))))a,b=map(int,input().split(','))#目标房间A和B。#构建每个传送门所连接房间的关系表。gates={}#{传送门编号:可到达的房间列表}。foriinrange(n):forgateinrooms[i]:ifgatenotingates:gates[gate]=[]gates[gate].append(i)print(gates)#使用BFS搜索,从房间A寻找到达房间B的最短路程。queue=[a-1]#起点A的房间编号入队列。dist=[-1]*n#记录每个房间到起点A的距离初始化为-1。dist[a-1]=0#起点A到自身的距离为0。whilequeue:u=queue.pop(0)forgateinrooms[u]:forvingates[gate]:ifdist[v]==-1:#如果该房间还没有被访问过。dist[v]=dist[u]+1ifv==b-1:#如果已经找到目标房间B,则立即返回最短路程。print(dist[v])exit()queue.append(v)#如果队列为空还没有找到目标房间B,则说明无法到达。print(-1)2023年5月第14届蓝桥杯Python编程青少组(国赛)真题(含答案)。一、单选题。1.以下选项中,哪一个可以将字典dict1与字典dict2合并?()。A.dict1.add(dict2)B.dict1.extend(dict2)C.dict1.update(dict2)D.dict1.merge(dict2)标准答案:C。2.执行print("{1}{0}".format("Hello","Python","!"))语句后,输出的结果是()。A.HelloPython!B.PythonHello!C.HelloPythonD.PythonHello标准答案:D。3.关于Python中的全局变量和局部变量,以下选项描述错误的是()。A.全局变量不可以被函数内部的代码块修改B.全局变量在函数之外一般没有缩进,在程序执行全过程有效。C.全局变量是指在函数之外定义的变量,而局部变量是指在函数内部定义的变量。D.局部变量和全局变量可以共存,但如果局部变量和全局变量的名称相同,局部变量会覆盖全局变量。标准答案:C。4.下列函数中哪一个可以删除集合中指定的元素?()。A.clear()B.discard()C.union()D.issubset()标准答案:B。5.以下选项中,哪一个可以更好地描述Python中类方法和静态方法之间的区别?()。A.类方法只能由类调用,而静态方法只能由实例调用。B.类方法可以访问类和实例的属性和方法,而静态方法不能访问。C.类方法必须要有一个参数,而静态方法可以没有参数。D.类方法只能访问类的属性和方法,而静态方法只能访问实例的属性和方法。标准答案:C。二、编程题。6.题。题目描述,例如:S="1Abb",其中字母有A,b,b一共有3个。给定一个字符串S(S长度<100),统计字符串中字母一共有多少个。输入描述:输入一个字符串S(S长度<100)。输出描述:输出一个整数,表示字符串S中字母的个数。样例输入:1Abb样例输出:3参考程序:s=input()cnt=0foriins:ifi.isalpha():cnt+=1print(cnt)7.题。提示信息:有一个由多个小正六边形组成的蜂巢图案,蜂巢外缘各边的小正六边形数量一致,且左右对称。(上图蜂巢图案外缘各边小正六边形数量为2)。以下为竖直对称线上小正六边形个数为3、5、7的3个蜂巢图案。编程实现:有一只蜗牛要从竖直对称线顶端的小正六边形处移动到底端的小正六边形中,它每次只能向它所在位置的小正六边形的左下方、正下方、右下方相邻的小正六边形处移动。已知竖直对称线上有N个小正六边形,请计算出蜗牛从竖直对称线顶端移动到底端共有多少条不同的移动路线。例如:N=3,竖直对称线上有3个小正六边形,如下图:蜗牛从竖直对称线顶端的小正六边形处(1号处)移动到另一端的小正六边形中(7号处)共有11条不同的路线。11条不同的路线分别为:(1->2->5->7)、(1->2->4->7)、(1->2->4->5->7)、(1->2->4->6->7)、(1->4->5->7)、(1->4->7)、(1->4->6->7)、(1->3->4->5->7)、(1->3->4->7)、(1->3->4->6->7)、(1->3->6->7)。输入描述:输入一个正整数N(2<n<30,n为奇数),表示图案上竖直对称线上小正六边形的个数。输出描述:输出一个整数,表示蜗牛从竖直对称线顶端移动到底端共有多少条不同的移动路线。样例输入:3样例输出:11参考程序:n=int(input())f=[[0]*(n//2+2)for_inrange(n+2)]foriinrange(1,n//2+2):f[1][i]=1foriinrange(2,n+1):f[i][n//2+1]=f[i-1][n/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论