蓝桥杯青少组python:第十三届省赛第二场

这篇文章包含一系列编程基础题目,如将十进制数55转换为十六进制,理解函数的调用机制,处理Python中的字符串操作,如切片和拼接,以及使用随机数生成函数。此外,还提出了若干编程挑战,如找出数字中最大值、模拟摘苹果问题、物品搬运的组合计算、污染区域的查找以及寻找有奖品的矩阵区域等。
摘要由CSDN通过智能技术生成

选择题

1、十进制 55 55 55转换为十六进制是()

  • A、 1101111 1101111 1101111
  • B、 313 313 313
  • C、 37 37 37
  • D、 67 67 67

2、下列关于函数的说法正确是()

  • A、函数的定义必须的程序的开头
  • B、函数定义后,其中的程序就可以自动运行
  • C、函数定义后,需要调用才会执行
  • D、函数体与关键字def必须左对齐

3、已知t = ("蓝桥", "青少组", "省赛"),执行t[::-1]语句输出的结果是():

  • A、("省赛", "青少组", "蓝桥")
  • B、["省赛", "青少组", "蓝桥"]
  • C、{"省赛", "青少组", "蓝桥"}
  • D、执行报错

4、字符串strip方法的作用是():

  • A、删除字符串头尾指定的字符
  • B、删除字符串末尾的指定字符
  • C、删除字符串头部的指定字符o
  • D、通过指定分隔符对字符串切片

5、下列方法中,哪一个可以随机生成一个实数():

  • A、random()
  • B 、randrange()
  • C、getrandbits()
  • D、randint()
  • random()方法返回随机生成的一个实数,它在 [ 0 , 1 ) [0,1) [0,1)范围内
  • randrange ([start,] stop [,step]) 方法返回指定递增基数集合中的一个随机数,基数默认值为 1 1 1
  • random.getrandbits(k)函数输出的是一个 0 − 2 k − 1 0-2^k-1 02k1范围内的一个随机整数
  • random.randint(start, stop) 方法返回指定范围内的整数

操作题

T1、字符串拼接

输入两个字符串 S 1 S1 S1 S 2 S2 S2,然后将 S 1 S1 S1 S 2 S2 S2拼接乘一个字符串输出。

输入描述

第一行输入一个字符串 S 1 S1 S1
第二行输入一个字符串 S 2 S2 S2

输出描述

S 2 S2 S2拼接到 S 1 S1 S1后面输出

输入样例

Ab
cd

输出样例

Abcd

代码实现

s1 = input()
s2 = input()
print(s1 + s2)

T2、最大数字

给定一个正整数,输出这个正整数中最大的那个数。

输入描述

输入一个正整数。

输出描述

正整数中各位最大的那个数。

输入样例

123

输出样例

3

代码实现

s = input()
ans = 0
for x in s:
    ans = max(ans, int(x))
print(ans)

T3、摘苹果

小蓝带着一根长为 80 c m 80cm 80cm的竹竿去摘苹果,当伸手碰不到,会借助竹竿摘苹果(竹竿碰到苹果就算摘下来)。
在给出小轩伸手的高度 N N N及每个苹果离地面的高度,请你帮助小蓝最多能摘到多少个苹果。

例如 N = 120 N=120 N=120,苹果高度为 122 , 222 , 159 , 200 122,222,159,200 122,222,159,200,最多摘到 3 3 3个苹果,高度为 222 222 222的苹果摘不到。

输入描述

输入一个正整数,表示小蓝伸手高度。

输入多个正整数,表示每个苹果离地面的高度,以英文逗号隔开。

输出描述

输出小蓝最多可以摘多少个苹果

输入样例

120
122,222,159,200

输出样例

3

代码实现

h = int(input())
s = eval(input())
ans = 0
for x in s:
    if h + 80 >= x:
    	ans += 1
print(ans)

T4、搬物品

小蓝需要将 N N N件物品从河的一岸搬运到河的另外一岸,每次搬运数量为 1 − 3 1-3 13件,请问小蓝将 N N N件物品全部搬运过去有多少种方案?

例如 N = 2 N=2 N=2时,将 2 2 2件物品全部搬过去有 2 2 2种方案:

  • 第一次搬一件,第二次搬一件
  • 一次搬两件

输入描述

输入一个正整数,表示需要搬的物品数。

输出描述

全部搬过去的方案数。

输入样例

3

输出样例

4

代码实现

n = int(input())
f = {1 : 1, 2 : 2, 3 : 4}
for i in range(4, n + 1):
    f[i] = f[i - 1] + f[i - 2] + f[i - 3]
print(f[n])

T5、污染

有一片海域分为 N × M N\times M N×M个方格,其中有些海域已被污染(用 0 0 0表示),有些海域没有被污染(用 1 1 1表示)。

请问这片 N × M N\times M N×M海域中有几块是没有被污染的独立海域(没有被污染的独立海城是指该块海域上下左右被已污染的海域包围,且 N × M N\times M N×M以外的海域都已被污染)。

例如下图,有三块海域(绿色)没有被污染,因为每一块上下左右都被污染的海域包围。
在这里插入图片描述

输入描述

第一行输入两个正整数 N N N M M M N N N表示矩阵方格的行数, M M M表示矩阵方格的列数, N N N M M M之间用一个英文逗号隔开。

第二行开始输入 N N N行,每行 M M M个数字,数字只能为 1 1 1或者 0 0 0 1 1 1表示没有被污染的海域, 0 0 0表示被污染的海域

输出描述

这边 N × M N\times M N×M海域中有几块时没有被污染的独立海域。

输入样例

4,5
1,1,0,0,0
1,0,1,0,0
1,0,0,0,0
1,1,0,1,1

输出样例

3

代码实现

# 输入
n, m = eval(input())
g = []
for i in range(n):
    g.append(list(eval(input())))
ans = 0
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
# 广度优先搜索,求连通块
def bfs(x, y):
    q = []
    g[x][y] = 0 # flood fill
    q.append((x, y))
    while len(q) != 0:
        x, y = q[0]
        q.pop(0)
        for i in range(4):
            a = x + dx[i]
            b = y + dy[i]
            # 越界检查
            if a < 0 or a >= n or b < 0 or b >= m:
                continue
            # 合法性检查
            if g[a][b] == 0:
                continue
            g[a][b] = 0 # flood fill
            q.append((a, b))
# 统计连通块个数
for i in range(n):
    for j in range(m):
        if g[i][j] == 1:
            ans += 1
            bfs(i, j)
print(ans)

T6、领奖活动

在一次领奖活动现场,有一个 N × M N\times M N×M个方格,其中有些方格中装有奖品,有些方格中没有奖品。 1 1 1表示有礼物, 0 0 0表示没有礼物。

小蓝参加了这次领奖活动,他需要从矩阵中选择一个正方形区域,如果所选的区域内的一条对角线方格中都有奖品,其他方格都没有奖品,就会获得所选区域的所有奖品,否则不能获得奖品。

请计算出小蓝最多能领取多少个礼物。

输入描述

第一行输入两个正整数 N N N M M M N N N表示方格的行数, M M M表示方格的列数。 N N N M M M之间以一个英文逗号隔开。

第二行开始输入 N N N行,每行 M M M个数字,(数字只能为 1 1 1或者 0 0 0), 1 1 1有礼物, 0 0 0表示没有礼物。

输出描述

小蓝最多能领取多少个礼物。

输入样例

5,6
1,0,1,0,0,0
0,1,0,1,0,0
1,0,0,0,1,0
0,1,0,0,0,1
0,0,1,0,1,0

输出样例

4

提示

在这里插入图片描述

代码实现

import sys
n, m = eval(input())
g = []
for i in range(n):
    g.append(eval(input()))
ans = 0

# 从x行y列开始,大小为k的子矩阵能够获得礼物数
# 每个子矩阵有两条对角线↘↗
def f(x, y, k):
    flag = True # 左上到右下对角线↘
    for i in range(k):
        if g[x + i][y + i] == 0:
            flag = False
            break
    if flag:
        return True
    x += k -  1 # 左下到右上对角线↗
    flag = True
    for i in range(k):
        if g[x - i][y + i] == 0:
            flag = False
            break
    return flag
# 子矩阵的最大行列数
k = min(n, m)
flag = False
while k >= 1:
    for i in range(n - k + 1): # 枚举子矩阵的行
        for j in range(m - k + 1): # 枚举子矩阵的列
            if f(i, j, k):
                print(k)
                sys.exit(0) # 找到答案,结束程序
    k -= 1
print(0)

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 第十三届蓝桥杯大赛青少国赛python是一个关于电梯的问目要求我们模拟一个电梯系统,根据乘客的请求,确定电梯的运行状态和楼层,最终输出总运行时间。 首先,我先定义了一个电梯类,其中包括电梯的当前楼层、运行状态、总运行时间等属性,并且编写了相应的初始化函数进行初始设置。 然后,我利用一个列表来表示乘客的请求列表,列表中每个元素都是一个元,包括请求的楼层和请求时间。通过遍历这个列表,我判断当前请求是否在电梯运行的楼层范围内。如果是,则不需要改变电梯的运行状态,只需要更新电梯的总运行时间。如果不是,则根据请求的楼层和电梯当前的楼层确定运行的方向,并且更新电梯的总运行时间。 最后,我输出了电梯的总运行时间。 这道的难点在于正确判断电梯的运行状态和方向,并且根据不同情况进行相应的操作。我通过分析目要求和思考,设计了合理的算法和逻辑,最终成功解决了问。 通过这道,我巩固了对Python语言的掌握,并且提高了编程和逻辑思维能力。这个比赛真对于提高编程水平和培养创新能力来说是非常有益的,我继续参加类似的比赛,不断提升自己。 ### 回答2: 第十三届蓝桥杯大赛青少国赛Python主要包括以下几个问: 1. 判断一个数是否为素数。 在这个问中,可以使用一个循环从2开始到该数的平方根,判断是否存在能够整除该数的因子。如果不存在,则该数为素数。 2. 模拟游戏角色的移动。 这个问可以通过设定一个坐标系,然后记录游戏角色的位置和移动方向。根据给定的指令,改变角色的位置。可以使用单个变量来表示角色的位置,并根据不同的指令来更新角色的位置。 3. 求解整数序列的最大连续和。 在这个问中,可以使用动态规划的思想来解决,设置一个变量max_sum表示当前的最大连续和,另一个变量tmp_sum表示当前子序列的和。遍历整个序列,如果tmp_sum加上当前元素大于0,则更新tmp_sum,并比较tmp_sum和max_sum的大小。 4. 判断一个IP地址是否合法。 IP地址由四个整数成,每个整数范围在0-255之间,且由点分隔。可以使用正则表达式来匹配IP地址的格式,并使用条件判断来判断每个整数是否在正确的范围内。 以上是对第十三届蓝桥杯大赛青少国赛Python的简要回答。具体的解过程需要根据每个具体问的要求和限制条件来进行分析和解答。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少儿编程乔老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值