第十二届蓝桥杯国赛试题及解析

2023-11-12


第一题

*选择题严禁使用程序验证设s =HiLanQiao',运行以下哪个选项代码可以输出“LanQiao”子串( A )。

A、print(s[-7:]) B、print(s/-6:-11)

C、print(s1-7:01) D、print(s[-7:-1])

第二题

*选择题严禁使用程序验证已知a=2021.0529,运行以下哪个选项代码可以输出“2021.05” ( B )A、print( .2f1'.format(a)C、print('.21.format(a)B、print(':.2f'.format(a))D、 print( :.2)'.format(a))

第三题

*选择题严禁使用程序验证已知 pi=3.1415926,运行 print(round(pi)round(pi.2))语句,输出的结果是( A )。

A、3 3.14B、24C、36.18D、3.143

解析:round()函数就是做四舍五入的。

第四题

*选择题严禁使用程序验证运行以下程序,输出的结果是 ( )。d ={'Beijing':'China','Washington':'America','Ottawa':'Canadian'}

print(max(d),min(d))A、Washington OttawaC、America ChinaB、Canadian ChinaD、Washington Beijing

解析:这个题只是说要去最大值,并没有具体到说键的最大值,还是值的最大值;所以我们这就直接找键的最大值就行了。

这样我们基本就是A最小,Z最大。

第五题

*选择题严禁使用程序验证如果p=ord(b),运行 print(p,chr((p+3)%26+p))语句,输出的结果是 ()。

A、66D B、66SC、98y D、98e

解析:ord()的作用就是把字母转化为数字。chr()的作用就是把数字转为字母。

编程题


第一题

编程实现:

给定 N个数字(包含整数和小数),找到N个数中最大的数字

输入描述:

输入N个数字(N>2),且N个数字之间以英文逗号隔开输出描述:输出N个数字中最大的数字样例输入: 4,8,2样例输出: 8

N=input().split(',')

print(max(N))

第二题

提示信息:质数:是一个大于 1的自然数,且除了1和它本身外,不能被其他自然数整除的数。最小的质数是 2,1不是质数。合数:一个正整数,如果除1 和它本身以外,还能被其他正整数整除,叫合数。如6 是合数,除了1和6以外,还能被2和3 整除。分解质因数:每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,把一个合数用质因数相乘的形式表示出来,叫做分解质因数(分解质因数只针对合数)。如合数 12=2X2X3。分解质因数的方法是先用这个合数的最小质因数去除这个合数,结果若是一个质数就不再除下去:若是一个合数就继续按原来的方法从最小质因数除起,直至最后除得的结果是一个质数。例如:合数 18 分解质因数,首先用最小质因数 2 去除,除后结果为合数 9,继续用最小质因数 3 去除,除后结果为质数3,就不再除下去。所以 18 的质因数为 2、3、3,故质因数的个数为3:

编程实现:

给定一个合数N,将N分解质因数后,输出其质因数个数

输入描述:输入一个合数N

输出描述:将N分解质因数后,输出质因个数

样例输入:18

样例输出:3

n=int(input())

lst= []

whilen>1:

foriinrange(2,n+1):

ifn%i==0:

n=n//i

lst.append(i)

break

print(len(lst))

第三题

变成实现:

给定一个含有字母和数字的字符串,输出此字符串中最长的数字子串的长度。

如:字符串‘a2a22d’,最长的数字子串为22,长度为2,故输出2

字符串‘lql2h567j765’,最长的数字子串为567和765,长度都为3,故输出3

输入描述:输入一个含有字母和数字的字符串(5<字符串长度<101)

输出描述:输出此字符串中最长的数字子串的长度

样例输入:a2a22d

样例输出:2

# 先看一下这题的思路:就是字符串从头开始算,如果碰见数字就加一,如果碰见字母就置零

n=input()

tmp=0

lst= []

foriinn:

ifi.isdigit(): # isdigit----这个是判断是否为数字的判断内置函数

tmp+=1

else:

tmp=0

lst.append(tmp)

print(max(lst))

第四题

提示信息:质数:是一个大于 1的自然数,且除了 1和它本身外,不能被其他自然数整除的数。最小的质数是 2,1不是质数。大于2的偶数有一个特点,任意一个大于 2 的偶数可以由一对质数相加得到,但有的偶数不止有一对这样的质数对。如偶数6,有一对质数相加得 6,为(3,3)如偶数14,有两对质数相加得 14,分别是 (3,11), (7,7)

编程实现:给定一个大于2的偶数,在所有满足“任意一个大于2的偶数可以由两个质数相加得到”这个特点的质数对中,找出两个质数差值最小的一对,并将差值输出(差值为大数减小数的值,两个质数相等时差值为0)。

例如: 偶数16,满足特点的质数对有(5,11)和(3,13),差值最小的一对是(5,11),11减5,差值为6。输入描述: 输入一个大于2的偶数N输出描述: 输出满足“任意一个大于2的偶数可以由两个质数相加得到”这个特点的所有质数对中,差值最小的那一对的差值样例输入:16样例输出:6

defprime(m):

foriinrange(2,m//2+1):

ifm%i==0:

returnFalse

else:

returnTrue

n=int(input)

foriinrange(n//2,n+1):

ifprime(i) andprime(n-i):

print(i-(n-i))

break

第五题

编程实现:孙悟空的金箍棒可以变高也可以变矮还可以变出多个金箍棒。这天孙悟空无聊变出了N个长短不一金箍棒,这些金箍棒之间相互吵闹,攀比谁高。当孙悟空每次手指其中一个金箍棒时,这个金箍棒高度不变,其他的金箍棒高度都会增加1。只有当所有金箍棒高度都一样时,他们之间才不相互吵闹,也不会再增加高度,保持静止。分别给定N个金箍棒的初始高度,请你帮助孙悟空计算一下至少手指几次可以让N个金箍棒高度都一样。

例如: 有3个金箍棒,初始高度分别为2,3,4。

第一次手指第三个金箍棒,第三个金箍棒高度不变,第一和第二个金箍棒高度分别增加1,变为3,4,4;

第二次手指第二个金箍棒,第二个金箍棒高度不变,第一和第三个金箍棒高度分别增加1,变为4,4,5;

第三次手指第三个金箍棒,第三个金箍棒高度不变,第一和第二个金箍棒高度分别增加1,变为5,5,5;

这时3个金箍棒的高度都为5,手指3次后金箍棒高度一样。所以至少手指3次才能使金箍棒高度都一样。

输入描述:

输入N个非全部相等的正整数(2<N<31),且之间以英文逗号隔开,分别表示N个金箍棒的初始高度,

输出描述:

输出一个正整数,表示至少手指几次才能使金箍棒高度都一样

样例输入:2,3,4

样例输出:3

# 看一下这个题哈,每次都是定住一个数,然后让其他两个数进行加一操作。

# 然后你们有没有发现,定住的数往往都是数据里面最大的一个。不然的话,让最大的再增加,是不是永远也不会相等啊

# 然后结束的条件就是让所有的值相等,是不是就可以结束程序了。

# 思路:每次都进行一个排序,将除最大值以外的所有值+1,再排序,再+1,直到所有的数字相同

l1=list(map(int,input().split(',')))

print(l1)

time=0

whileTrue:

l1.sort()

print(l1)

foriinrange(len(l1) -1):

l1[i] +=1

print(l1)

time+=1

ifmin(l1) ==max(l1):

break

print(time)

第六题

编程实现:

六月一日是国际儿童节,小蓝的学校为迎接儿童节要在学校的一块正方形的空地上使用不同颜色的花摆放图案。

为了摆放的更精准,图案更漂亮,小蓝把这块正方形空地同比例缩小将其画在纸上,并平均分成100*100的方格,每个方格的坐标点为,(1,1)........(100,100),如下图:

首先在指定坐标的方格内放置红色的花卉(每个方格放一盆),完成后,找出最多有多少盆红色花在同一条直线上。 (同一直线包含同一列、同一行、同一对角线,红色花可以连续也可以不连续)

如:指定的坐标(2.1)(3.2)(5.2)(4.3)3.4)(6.5)的方格内放置红色的花,其中最多的红色花卉在同一条直线上的坐标点为(2,1)、(3,2)、(4.3)、(6.5),故最多有4盆红色的花卉在同一条直线上。

输入描述:

输入n对正整数,每一对正整数之间以一个空格隔开,代表放置红色花卉的方格位置。每对正整数中的两个数字以英文逗号隔开输出描述:

输出最多有多少盆红色花卉在同一条直线上样例输入: 2,1 3,2 5,2 4,3 3,4 6,5样例输出: 4

首先要先读题,这个题是什么意思呢,就是输入这个几个坐标之后,看同一条线上有几个坐标。不管是横着还是竖着或者斜着都可以,最后是不是只有斜着那条线上有四个,所以最后的输出结果是4

首先要注意的是(1,1)在左下角

这个其实就是一个找规律的题,首先来看一下什么规律啊。

横着的方向就是y相同,竖线方向就是x相同。

\方向是和相同(x+y),/方向是差相同(x-y)

找到规律之后,我们就可以着手去做了

为了方便我们操作,是不是应该把输入的数据进行格式进行以下修改,方便我们之后的去操作啊

我们把输入的格式变成这种[[2,1],[3,2],[5,2],[4,3],[3,4],[6,5]],是不是以后我们去操作更方便啊

所以,我们第一个难点就是如何去操作它呢

lst1=input().split(' ')

print(lst1)

lst= []

foriinlst1:

lst.append(list(map(int,i.split(','))))

print(lst)

# 和相同

# 差相同

# x相同

# y相同

l1= []

l2= []

l3= []

l4= []

# 然后我们再创建一个列表,用来保存出现的次数

lcount= []

foriinlst:

l1.append(sum(i))

# 然后我们打印一下结果看下

print(l1) # [3,5,7,7,7,11] 里面是不是有三个7,这是不是代表着和相同的有三个

# 接下来就去统计出现的次数,然后保存在lcount中

foriinl1:

lcount.append(l1.count(i))

#这里面保存的就是数据出现的次数

print(lcount)

# 然后差、x、y跟和的计算都是差不多的

# 求差

foriinlst:

l2.append(i[0]-i[1])

foriinl2:

lcount.append(l2.count(i))

# 求x

foriinlst:

l3.append(i[0])

foriinl3:

lcount.append(l3.count(i))

# 求y

foriinlst:

l4.append(i[1])

foriinl4:

lcount.append(l4.count(i))

# 然后这个lcount里面是不是保存的出现的次数,那么我们取最大值之后是不是我们要的结果

print(max(lcount)) # 4

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第十二届蓝桥杯国赛试题及解析 的相关文章