image

编辑人: 桃花下浅酌

calendar2025-06-14

message7

visits721

第15届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2023年12月17日真题参考答案

一、单选题

1、以下哪项是取余运算符?(   )

A *

B //

C %

D +


2、已知:s = "python",执行 print(s[::2])语句后,输出的结果是(   )。

A python

B pto

C nohtyp

D yhn


3、在 Python 中,下面哪个选项可以获取字符串中某字符出现的次数?(   )

A length()

B count()

C size()

D len()


4、Python 中的列表和元组的主要区别是(   )。

A、

列表中元素的值可修改,元组中元素的值不可修改

B、

列表是有序的,元组是无序的

C、

列表是一维的,元组可以是多维的

D、

列表可以包含不同类型的元素,元组只能包含相同类型的元素


5、关于 Python 语言的浮点数类型,以下选项中描述错误的是(   )。

A 小数部分不可以为 0

B 带有小数的类型通常用浮点数类型表示

C float(x) 中 x 可以是十进制实数形式的字符串

D 整数写成指数形式是浮点数类型


二、实操题

6、小青有 N 个小球,小蓝有 M 个小球,请计算他们一共有多少个小球。

例如:N = 2,M = 3,表示小青有 2 个小球,小蓝有 3 个小球,一共有 5 个小球(5 = 2 + 3)。

输入描述:

第一行输入一个整数 N(1≤N≤1000),表示小青的小球数量第二行输入一个整数 M(1≤M≤1000),表示小蓝的小球数量

输出描述:

输出一个整数,表示一共有多少个小球


样例输入:

2
3

样例输出:

5

参考答案:对于这个问题,我们需要计算小青和小蓝的小球总数。输入给出小青有N个小球,小蓝有M个小球。所以,他们一共有N+M个小球。


7、给定一个长度为 11 的字符串 S,表示电话号码,然后将电话号码中第三位数字后的连续四位数字用“*”替换,并输出替换后的字符串。

例如:S = "13900001234",用“*”替换第三位数字后的连续四位数字为“139****1234”。

输入描述:

输入一个长度为 11 的字符串 S(字符串仅包含 0~9 之间的数字且首个字符只能为 1),表示电话号码

输出描述:

输出一个字符串,表示替换后的字符串


样例输入:

13900001234

样例输出:

139****1234

参考答案:根据题目要求,我们需要将电话号码中第三位数字后的连续四位数字用“*”替换。首先,我们需要找到第三位数字的位置,然后将该位置后的四个字符替换为四个“*”。假设电话号码为 S,长度为 11。我们可以用以下步骤实现:1. 找到第三位数字的位置,记为 index。由于字符串下标从 0 开始,因此 index = 2。2. 构造一个字符串 result,将电话号码 S 的前两位数字添加到 result 中。3. 将四个“*”添加到 result 中,对应的位置是 S 的第三、第四、第五和第六位数字。4. 将电话号码 S 的最后五位数字添加到 result 中。5. 返回 result。用 Python 代码实现如下:```pythondef replace_phone_number(S):index = 2result = S[:index] + '*' * 4 + S[index + 4:]return result```


8、给定 N 个长度不同的字符串,请将每个字符串的最后一个字符删除,并按长度从短到长的顺序换行输出。

例如:N = 3,3 个字符串分别为 dfgas、abc、cbdf,删除最后一个字符后为 dfga、ab、cbd;

按长度从短到长的顺序换行输出为:

ab cbd dfga

输入描述:

第一行输入一个整数 N(2≤N≤10),表示字符串的个数

第二行输入 N 个长度不同的字符串(2≤字符串长度≤20),字符串之间以一个空格隔开

输出描述:

输出 N 行字符串,表示所有字符串删除最后一个字符后,按长度从短到长的顺序换行输出的结果


样例输入:

3
dfgas abc cbdf

样例输出:

ab cbd dfga

参考答案:br />```pythonN = int(input())strings = input().split()for i in range(N):strings[i] = strings[i][:-1]strings.sort(key=len)for s in strings:print(s)```


9、有 N 张扑克牌叠放在桌上,A 和 B 两人轮流抽牌,每次只能从最上面或最下面抽一张牌,当最后一张牌被抽完时,比较 A 和 B 两人扑克牌的点数总和,点数总和大的一方胜利,点数相同时双方均不算胜利。A 先抽牌,请统计一共有多少种不同的抽牌情况,A 有多少种不同的获胜情况。

例如:N = 3,有 3 张扑克牌,从上往下的点数依次为 3、2、1。A 先抽牌,所有不同的抽取情况有:

第一种:A 抽 3,B 抽 1,A 再抽 2,A 的点数总和为 5,B 的点数总和为 1;第二种:A 抽 3,B 抽 2,A 再抽 1,A 的点数总和为 4,B 的点数总和为 2;第三种:A 抽 1,B 抽 3,A 再抽 2,A 的点数总和为 3,B 的点数总和为 3;第四种:A 抽 1,B 抽 2,A 再抽 3,A 的点数总和为 4,B 的点数总和为 2;一共有 4 种不同的抽牌情况,A 有 3 种不同的获胜情况。

输入描述:

第一行输入一个整数 N(2≤N≤20),表示扑克牌的张数

第二行输入 N 个整数(1≤整数≤13),同一个整数不能出现超过 4 次,表示从上往下每张扑克牌的点数, 整数之间以一个空格隔开

输出描述:

第一行输出一个整数,表示一共有多少种不同的抽牌情况第二行输出一个整数,表示 A 有多少种不同的获胜情况


样例输入:

3
3 2 1

样例输出:

4
3

参考答案:br />```123```


10、有一张 N 行 N 列的网格纸,网格中每个小格子都是 1×1 的正方形,有些格子被填充成橙色。请数一数橙色区域一共有多少个矩形。

例如:N = 4,4 行 4 列的网格纸如下图:

图中网格纸的橙色区域一共有 7 个矩形。

输入描述:

第一行输入一个正整数 N(2≤N≤50)

接下来输入 N 行,每行 N 个整数(整数只能为 1 或 0 ),其中 1 表示填充成橙色,0 表示没有填充成橙色,整数之间以一个空格隔开

输出描述:

输出一个整数,表示橙色区域的矩形数量


样例输入:

4
1001
0000
1001
0110

样例输出:

7

参考答案:```def countRectangles(N, grid):count = 0for i in range(N):for j in range(N):if grid[i][j] == 1:row_start = icol_start = jwhile row_start < N and grid[row_start][col_start] == 1:row_start += 1while col_start < N and grid[i][col_start] == 1:col_start += 1rect_width = row_start - irect_height = col_start - jcount += rect_width * rect_heightreturn countN = int(input().strip())grid = []for _ in range(N):grid.append(list(map(int, input().strip().split())))print(countRectangles(N, grid))```


11、老师在黑板上写了一个不超过 500 位的整数 n(1≤n<10500),要求同学们擦掉其中任意 k 个数字,剩余数字的顺序不变,希望得到的数最大。

例如:n = 69134,k = 2,从 69134 中擦掉 2 个数字;从左往右,将第一个位置的 6 和第三个位置的1 擦掉,变成的新数 934 是最大的。

输入描述:

输入两个整数 n 和 k(1≤n<10500,0≤k<n 的位数),整数之间以一个空格隔开

输出描述:

输出一个整数,表示擦掉 k 个数字后,得到的最大数


样例输入:

69134 2

样例输出:

934

参考答案:对于这个问题,我们可以按照以下步骤来求解:1. 首先,将输入的整数n转换为字符串形式,方便后续处理。2. 从左到右遍历这个字符串,找到第一个出现k+1次的数字,记为x。3. 将x及其右侧的所有数字都删除,得到一个新的字符串。4. 将剩下的数字按照从大到小的顺序重新排列,得到最终的字符串。5. 将最终的字符串转换回整数形式,并输出。


喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!

创作类型:
原创

本文链接:第15届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2023年12月17日真题参考答案

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share