2024年9月第15届蓝桥杯Python编程青少组(选拔赛-中高级)真题(含答案)_第1页
2024年9月第15届蓝桥杯Python编程青少组(选拔赛-中高级)真题(含答案)_第2页
2024年9月第15届蓝桥杯Python编程青少组(选拔赛-中高级)真题(含答案)_第3页
2024年9月第15届蓝桥杯Python编程青少组(选拔赛-中高级)真题(含答案)_第4页
2024年9月第15届蓝桥杯Python编程青少组(选拔赛-中高级)真题(含答案)_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

2024年9月第15届蓝桥杯Python编程青少组(选拔赛_中高级)真题(含答案)一、单选题。1.下列运算符中,表示并集的是?()。A.&B.|C.-D.^标准答案:B。2.下列选项中,变量x能被正确赋值为24的是?()。A.2*x=48B.x,y=23,24C.x=y=24D.x,y=[24]标准答案:C。3.执行print("True"if1<0else"False")语句后,输出的结果是?()。A.TrueB.FalseC.1D.0标准答案:B。4.运行以下程序,输出的结果是?()。a=2024defyear(x=a):print(x)a=2025year()A.2024B.2025C.报错D.无输出标准答案:A。5.关于Python读写文件的描述,【错误】的是?()。A.在二进制模式下打开文件时,不能指定encoding参数。B.在处理文件对象时,最好使用with关键字,当子句体结束后,文件会正确关闭。C.当readline()返回'\n'时,表示已经到达文件末尾。D.写入其他类型的对象前,要先把该其他类型对象转化为字符串(文本模式)或字节对象(二进制模式)。标准答案:C。二、编程题。6.移动字符0。编程实现:给定一个包含数字0的字符串,将其中的所有0移到字符串末尾,同时保持其他非0字符的相对顺序不变,输出操作后的字符串。例如:字符串"A001020",将其中的4个0移到末尾后,结果为"A120000"。输入描述:输入一个包含数字0的字符串(3≤字符串长度≤100)。输出描述:输出一个字符串,表示按要求操作后的字符串。样例输入:A001020样例输出:A120000参考程序:s=input()s1=s2=''foriins:ifi!='0':s1+=ielse:s2+=iprint(s1+s2)7.删除重复数。编程实现:给定包含n个整数的列表,从左到右查看每个整数,对于其中重复出现的整数,仅保留位置最靠右的那个整数,其余位置的重复整数均删除。输出删除所有重复整数后的列表。例如:n=6;包含6个整数的列表为[7,10,5,5,5,10];其中重复出现的整数有10、5,保留位置最靠右的10和5,列表变为[7,5,10]。输入描述:第一行输入一个整数n(1≤n≤105)。第二行输入n个整数(1≤整数≤105),表示列表中从左到右的整数,整数之间以一个空格隔开。输出描述:按从左到右的顺序输出列表中的整数,表示删除重复整数后的结果,整数之间以一个空格隔开。样例输入:671055510样例输出:7510参考程序:n=int(input())ls=list(map(int,input().split()))d={}#字典记录值:位置。foriinrange(len(ls)):d[ls[i]]=it=sorted(d.items(),key=lambdax:x[1])#按值排序。foriint:print(i[0],end='')8.拆分正整数。编程实现:给定一个正整数n,将n拆成一组各不相同的正整数,使得这组正整数的个数大于等于2且总和为n。请计算有多少种不同的拆法;如果不能按要求拆分,输出0。注意:几种拆法中,如果包含的整数完全相同,仅顺序不同,则视为同一种拆法。例如:{1,2,3}、{2,1,3}和{3,2,1}被视为同一种拆法。例如:n=6;满足要求的拆法有以下3种:第一种:{1,5}。第二种:{2,4}。第三种:{1,2,3}。输入描述:输入一个正整数n(1≤正整数≤90)。输出描述:输出一个整数,表示有多少种拆法满足要求。样例输入:6样例输出:3参考程序:defcal(n):#dp[i]表示将i拆分为若干不同的正整数的方式数。dp=[0]*(n+1)dp[0]=1#拆分0的方式有1种。#从1到n,逐步加上每个数。foriinrange(1,n+1):forjinrange(n,i-1,-1):#倒序遍历,避免重复使用同一个数。dp[j]+=dp[j-i]#返回dp[n]减去拆分1个数的情况(即dp[n]-1)。returndp[n]-1n=int(input())print(cal(n))9.五子棋。编程实现:一张棋盘由n条横线与n条竖线垂直交叉构成。当前棋盘上的交叉位置已有若干黑棋。现需在没有棋子的交叉位置落一颗黑棋,使得落子后,包含此棋子在内的横向或竖向或斜向能够形成连续五颗及以上的黑棋。请计算一共有多少个位置满足要求;如果没有位置满足要求,输出0。以下图片是4种出现连续五颗黑棋的情况:例如:n=8;棋盘由8条横线和8条竖线垂直交叉构成,棋盘已有黑棋如下图:可以在以下位置放置黑棋(位置已使用红色框标注)来满足要求:一共有5个位置可以满足要求。输入描述:第一行输入一个整数n(5≤n≤1000),表示棋盘的横线和竖线数量。接下来输入n行,每行n个整数,整数只能为0或1;0表示该交叉位置没有黑棋,1表示该交叉位置有黑棋,整数之间以一个空格隔开。输出描述:输出一个整数,表示满足题目要求的位置数量;如果没有位置满足要求,输出0。样例输入:80000000001111000000111010010010000000100100001000000000000000000样例输出:5参考程序:n=int(input())ls=[]foriinrange(n):r=list(map(int,input().split()))ls.append(r)#(0,1),水平向右。#(1,0),垂直向下。#(1,1),右下对角线。#(1,-1),左下对角线。fx=[(0,1),(1,0),(1,1),(1,-1)]count=0foriinrange(n):forjinrange(n):ifls[i][j]==0:forfinfx:dx,dy=ftotal=1#包括当前要放置的棋子。#向正方向延伸。x,y=i+dx,j+dywhile0<=x<nand0<=y<nandls[x][y]==1:total+=1x+=dxy+=dy#向反方向延伸。x,y=i-dx,j-dywhile0<=x<nand0<=y<nandls[x][y]==1:total+=1x-=dxy-=dyiftotal>=5:count+=1break#只要有一个方向满足即可。print(count)10.相同颜色的石头。编程实现:有两排石头,每排n颗,从左到右依次排开,每颗石头的颜色为黄色或者绿色。每次可以选择第一排的任意一颗石头与第二排的任意一颗石头交换位置。请计算最少需要交换多少次才能让每一列石头的颜色都相同;如果无论交换多少次都无法使每一列石头的颜色都相同,则输出-1。例如:n=3,每排3颗石头。第一排3颗石头颜色从左到右依次是黄、绿、绿:第二排3颗石头颜色从左到右依次是绿、绿、黄:其中一种最少交换次数的方案如下:(1)先将第一排的第3颗石头与第二排的第3颗石头交换位置。(2)再将第一排的第3颗石头与第二排的第1颗石头交换位置。此时每一列的石头颜色都相同,故至少需要交换2次。输入描述:第一行输入一个整数n(1≤n≤105),表示每排的石头数量。第二行输入n个整数,整数只能为1或0,1表示黄色,0表示绿色,表示第一排从左到右每颗石头的颜色,整数之间以一个空格隔开。第三行输入n个整数,整数只能为1或0,1表示黄色,0表示绿色,表示第二排从左到右每颗石头的颜色,整数之间以一个空格隔开。输出描述:输出一个整数,表示最少的交换次数;如果无论交换多少次都无法使每一列的石头颜色都相同,则输出-1。样例输入:3100001样例输出:2参考程序:defmin_swap(n,row1,row2):#统计(1,0)和(0,1)的个数。y_g=0#1,0:第一排黄,第二排绿。g_y=0#0,1:第一排绿,第二排黄。foriinrange(n):ifrow1[i]==1androw2[i]==0:y_g+=1elifrow1[i]==0androw2[i]==1:g_y+=1#如果两者的数量相等,可以通过交换消除不匹配。ify_g==g_y:returng_y+g_yelse:return-1n=int(input())#石头的数量。row1=list(map(int,input().split()))#第一排的石头颜色。row2=list(map(int,input().split()))#第二排的石头颜色。#计算并输出结果。result=min_swap(n,row1,row2)print(result)11.移动小球。编程实现:n个小球从左到右排成一排,每个小球上都标有一个数值。接下来进行若干次操作,每次从以下操作中任选一项:(1)移走一个小球,本次操作获得1积分。(2)移走k(k≥2)个小球,要求k个小球上的数值相同且位置连续,本次操作获得k×k的积分。注:每次小球被移走后,剩余小球相对顺序不变,从左到右重新排成一排。给定n个小球从左到右的数值,请计算将这n个小球全部移走后可获得的总积分的最大值。例如:n=5;5个小球从左到右的数值依次为1、1、4、1、5;可按以下操作移走小球:第一次:将1、1、4、1、5中数值为4的小球移走,剩余小球排列为1、1、1、5,本次操作获得1积分。第二次:将1、1、1、5中数值为1的3个小球移走,剩余小球排列为5,本次操作获得9(3×3)积分。第三次:将数值为5的小球移走,本次操作获得1积分。最终获得的总积分的最大值为11(1+9+1)。输入描述:第一行输入一个整数n(1≤n≤100),表示小球的数量。第二行输入n个整数(1≤整数≤100),表示从左到右每个小球的数值,整数之间以一个空格隔开。输出描述:输出一个整数,表示总积分的最大值。样例输入:511415样例输出:11参考程序:n=int(input().strip())a=list(map(int,input().split()))dp=[[[-1]*(n+1)for_inrange(n)]for__inrange(n)]defsolve(i,j,k):ifi>j:return0ifdp[

温馨提示

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

评论

0/150

提交评论