阿里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 = 0pot_j = 0for i in range(m):a.append(input())for j in range(n):# 找到起点if a[i][j] == '@':pot_i = ipot_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 += 1elif direction[i] == 'SOUTH':while pot_i + 1 < m and a[pot_i + 1][pot_j] != '#':pot_i += 1elif direction[i] == 'WEST':while pot_j - 1 >= 0 and a[pot_i][pot_j - 1] != '#':pot_j -= 1elif direction[i] == 'NORTH':while pot_i - 1 >= 0 and a[pot_i - 1][pot_j] != '#':pot_i -= 1print((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