阿里20210310春招笔试记录-Python解题
第一题
- 问题描述:
小偷从出发点按指定方向出发,除非遇到墙或超出城市必须转方向,不然只能直走。城市大小m*n。
- 输入描述:
1. 第1行,三个数字m n k;m*n表示城市大小,k表示小偷转了几次方向
2. 第2-m+1行,用@ · #三个字符表示行走路径,@表示起始位置,·表示前方可行,#表示前方是墙
3. 倒数k行,用NORTH,SOUTH,WEST,EAST表示上,下,左,右方向
- 输出描述:
最终的位置
例子
- 输入:
3 4 4
@···
·#··
···#
EAST
SOUTH
WEST
NORTH
- 输出:
(1,3)
if __name__ == "__main__":
m, n, k = map(int, input().split())
a = []
direction = []
pot_i = 0
pot_j = 0
for i in range(m):
a.append(input())
for j in range(n):
# 找到起点
if a[i][j] == '@':
pot_i = i
pot_j = j
# k次转弯
for i in range(k):
direction.append(input())
if direction[i] == "EAST":
# '·'和'@'都可当作通路
while pot_j + 1 < n and a[pot_i][pot_j + 1] != '#':
pot_j += 1
elif direction[i] == 'SOUTH':
while pot_i + 1 < m and a[pot_i + 1][pot_j] != '#':
pot_i += 1
elif direction[i] == 'WEST':
while pot_j - 1 >= 0 and a[pot_i][pot_j - 1] != '#':
pot_j -= 1
elif direction[i] == 'NORTH':
while pot_i - 1 >= 0 and a[pot_i - 1][pot_j] != '#':
pot_i -= 1
print((pot_i + 1, pot_j + 1))
第二题
- 问题描述:
有n个物品,并且每个物品有价值,小明和朋友1、朋友2分这n个物品,将这n个物品摆放成一个圈,小明先从中拿一个物品,朋友1拿小明拿走物品的左边那个,朋友2拿小明拿走物品的右边那个,然后重复上述动作,直至拿完,小明想使拿到的所有物品价值最大。
- 输入描述:
1. 第1行,输入数字T,表示T组数据
2. 第2行,输入数字n,表示有n个物品(n%3==0)
3. 第3行,输入一串数字,用空格隔开,表示这n个物品的价值
- 输出描述:
小明拿到的最大价值
例子
- 输入:
1
6
1 2 3 4 5 6
- 输出:
10
leetcode 1388

1885

被折叠的 条评论
为什么被折叠?



