选择题
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. 兑换券
问题描述
小蓝有多张兑换券,这些兑换券可分为AAA、BBB、CCC三种,且111张AAA加111张BBB加111张CCC组合可以兑换一个玩偶。
现将所有兑换券排成一排,并以字符串的形式给出,请帮助小蓝计算出现有兑换券最多可以兑换几个玩偶。
例如:字符串为AABBCACCCAABBCACCCAABBCACCC,可以组成222组ABCABCABC,故最多可以兑换222个玩偶。
输入描述
输入一个由AAA、BBB、CCC三个大写字母组成的字符串 (字符串长度小于100010001000),表示所有的兑换券。
输出描述
输出一个整数,表示所有兑换券按照兑换要求最多可以兑换玩偶的数量。
样例输入
AABBCACCC
样例输出
2
代码实现
s = input()
A = s.count('A')
B = s.count('B')
C = s.count('C')
print(min(A, B, C)))
T4. 糖果
问题描述
现有NNN罐糖果,且己知每罐糖果的初始数量。现给出两个数值LLL和RRR(L<=R)(L<=R)(L<=R),需要把每罐糖果的数量调整为:L≤L\leL≤任意一罐糖果的数量≤R\le R≤R。
调整的方式是每次从其中一罐糖果中拿出111块放到其他糖果罐中。请你计算出最少调整几次才能使每装糖果的数量都在LLL到RRR范围之间,如果不能将每罐糖果都调整到LLL到RRR范围之间则输出−1-1−1。
例如:N=2N=2N=2,222罐糖果的初始数量为333和888,L=3L=3L=3,R=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行为两个整数,用空格分隔,表示LLL和RRR。
输出描述
输出一个整数,表示最少调整几次才能使每装糖果的数量都在LLL到RRR范围之间;如果不能完成,则输出−1-1−1。
样例输入#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\le100≤100),小蓝需要按照以下要求从矩阵中找出一条最长的移动路线,且输出最长路线的长度 (111个方格为111个长度)。
要求:
- 小蓝可以从矩阵中任意一个方格开始向它的上、下、左、右相邻的任意一个方格移动,且移动的路线不能有交叉
- 小蓝每次所要移动到的方格中的整数都要小于当前所在方格中的整数(如当前所在的方格中的整数为333,那么可以移动到数字为000,111,222的格子里,不可以移动到数宁为333、444、555、…的格子里) ;
例如:N=3N=3N=3,M=3M=3M=3,矩阵方格如下图所示,最长路线为4→3→2→1→04\rightarrow3\rightarrow2\rightarrow1\rightarrow04→3→2→1→0,最长路线的长度为555。
输入描述
输入第一行为两个整数nnn和mmm,表示矩阵的大小,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)