阿里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