【笔试记录】2021/3/10阿里

阿里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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值