第14届蓝桥杯青少组python试题解析:22年10月选拔赛

选择题

T1. 执行print (5%3) 语句后,输出的结果是 ( )

  • 0
  • 1
  • 2
  • 3

T2. 以下选项中,哪一个是乘法运算符?()

  • %
  • //
  • *
  • **

T3. 已知x=3,求x//2+x**2的运算结果?

  • 7.5
  • 10
  • 8
  • 10.5

T4. 以下选项中,对下面程序的打印结果描述正确的是 ()

a = [1,2,3,4]
i = len(a) - 1
while i >= 0:
	print(a[i])
	i -= 1
  • 把列表a倒序打印出来
  • 把列表a顺序序打印出来
  • 去除列表a的第一项后并以此打印出每一项
  • 去除列表a的最后一项后并依次打印出每一项

编程题

T1. 最后一个字符

问题描述

编程实现输出字符串中最后一个字符。

输入描述

输入一个字符串

输出描述

输出字符串中最后一个字符

样例输入

hgf

样例输出

f

代码实现

s = input()
print(s[-1])

T2. 遥控器

问题描述

空调遥控器上的模式按钮可控制四种模式的切换。空调的初始模式为制热模式

  • 第一次按下按钮变为制冷模式
  • 第二次按下按钮变为睡眠模式
  • 第三次按下按钮变为除湿模式
  • 第四次按下按钮变为制热模式
  • 第五次按下按钮变为制冷模式

以此类推。请计算出按下NNN次按钮后,空调为何种模式。

输入描述

输入一个正整数NNN (1<N<10001<N<10001<N<1000),表示按下空调遥控器的模式按钮的次数 (初始模式为制热模式)。

输出描述

输出一个大写字母,当按下模式按钮NNN次后,空调为制热模式则输出RRR,为制冷模式则输出LLL,为睡眠模式则输出SSS,为除湿模式则输出CCC样例输入

样例输入

5

样例输出

L

代码实现

n = int(input())
s = 'RLSC'
print(s[n % 4])

T3. 兑换券

问题描述

小蓝有多张兑换券,这些兑换券可分为AAABBBCCC三种,且111AAA111BBB111CCC组合可以兑换一个玩偶。

现将所有兑换券排成一排,并以字符串的形式给出,请帮助小蓝计算出现有兑换券最多可以兑换几个玩偶。

例如:字符串为AABBCACCCAABBCACCCAABBCACCC,可以组成222ABCABCABC,故最多可以兑换222个玩偶。

输入描述

输入一个由AAABBBCCC三个大写字母组成的字符串 (字符串长度小于100010001000),表示所有的兑换券。

输出描述

输出一个整数,表示所有兑换券按照兑换要求最多可以兑换玩偶的数量。

样例输入

AABBCACCC

样例输出

2

代码实现

s = input()
A = s.count('A')
B = s.count('B')
C = s.count('C')
print(min(A, B, C)))

T4. 糖果

问题描述

现有NNN罐糖果,且己知每罐糖果的初始数量。现给出两个数值LLLRRR(L<=R)(L<=R)(L<=R),需要把每罐糖果的数量调整为:L≤L\leL任意一罐糖果的数量≤R\le RR

调整的方式是每次从其中一罐糖果中拿出111块放到其他糖果罐中。请你计算出最少调整几次才能使每装糖果的数量都在LLLRRR范围之间,如果不能将每罐糖果都调整到LLLRRR范围之间则输出−1-11

例如:N=2N=2N=2222罐糖果的初始数量为333888L=3L=3L=3R=6R=6R=6,通过调整使得:3<=3<=3<=任意一罐糖果的数量<=6<=6<=6,调整方式如下:

  • 第一次从初始数量为888的罐中拿1块放到初始数量为333的罐中,调整后为 (4,7)(4,7)(4,7)
  • 第二次从数量为777的罐中拿111块放到数量为444的罐中,调整后为(5,6)(5,6)(5,6)

故最少调整222次。

输入描述

输入一共333行,第一行为一个整数nnn,表示一共有nnn罐糖果;第222行为nnn个整数,用空格分隔,表示每罐糖果的数量;第333行为两个整数,用空格分隔,表示LLLRRR

输出描述

输出一个整数,表示最少调整几次才能使每装糖果的数量都在LLLRRR范围之间;如果不能完成,则输出−1-11

样例输入#1

2
3 8
3 6

样例输出#1

2

样例输入#2

4
4 2 2 4
3 4

样例输出#2

2

代码实现

n = int(input())
a = list(map(int, input().split()))
L, R = map(int, input().split())
z = sum(a)
# 如果不能完成,则输出-1
if z < L * n or z > R * n:
    print(-1)
else:
    ans = 0
    while True:
        a.sort()
        if a[0] >= L and a[n - 1] <= R:
            print(ans)
            break
        # 将最多的向最小的进行调整
        a[n - 1] -= 1;
        a[0] += 1
        # 计数
        ans += 1

T5. 最长路线

问题描述

有一个N×MN\times MN×M的矩阵,且矩阵中每个方格中都有一个整数(0≤0\le0整数≤100\le100100),小蓝需要按照以下要求从矩阵中找出一条最长的移动路线,且输出最长路线的长度 (111个方格为111个长度)。
要求:

  1. 小蓝可以从矩阵中任意一个方格开始向它的上、下、左、右相邻的任意一个方格移动,且移动的路线不能有交叉
  2. 小蓝每次所要移动到的方格中的整数都要小于当前所在方格中的整数(如当前所在的方格中的整数为333,那么可以移动到数字为000111222的格子里,不可以移动到数宁为333444555、…的格子里) ;

例如:N=3N=3N=3M=3M=3M=3,矩阵方格如下图所示,最长路线为4→3→2→1→04\rightarrow3\rightarrow2\rightarrow1\rightarrow043210,最长路线的长度为555
在这里插入图片描述

输入描述

输入第一行为两个整数nnnmmm,表示矩阵的大小,nnn行,mmm列。
接下来nnn行,每行mmm个整数,用空格分隔。

输出描述

输出一个整数,输出最长路线的长度。

样例输入

3 3
1 1 3
2 3 4
1 0 1

样例输出

5

代码实现

n, m = map(int, input().split())
a = []
for i in range(n):
    b = list(map(int, input().split()))
    a.append(b)
# f[i][j]表示从第i行j列出发的最长路线的长度
# 初始化二维列表
f = [[0] * (m + 1) for _ in range(n + 1)]
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]

# 记忆化搜索
def dfs(i, j):
    if f[i][j] != 0:
        return f[i][j]
    f[i][j] = 1
    for k in range(4):
        x, y = i + dx[k], j + dy[k]
        if x < 0 or x >= n or y < 0 or y >= m: # 越界检查
            continue
        if a[x][y] >= a[i][j]: # 合法性检查
            continue
        f[i][j] = max(f[i][j], dfs(x, y) + 1)
    return f[i][j]
        
ans = 0
for i in range(n):
    for j in range(m):
        ans = max(ans, dfs(i, j))
       
print(ans)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

少儿编程乔老师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值