首页 > 2021华为校园招聘-软件-笔试
头像
AmazingM
编辑于 2020-08-13 11:37
+ 关注

2021华为校园招聘-软件-笔试

时间:2020年8月12日 19:00:00 -- 21:10:00
公司:华为
题型:3道编程题

第一题:
思路:初始化零钱,按照顾客支付顺序模拟,遇到零钱数额为负值返回false,顺利走完返回true
"""
每杯咖啡5元,客户支付5,10,20元三种,初始无备用零钱
输入:一串数字序列,表示顾客每次支付的金额
输出:如果能成功找零钱,返回true,顺序号;
     如果不能成功,返回false,顺序号;
"""


def fun(pays):
    money = {
        5: 0,
        10: 0,
    }
    for i, pay in enumerate(pays):
        if pay == 5:
            money[5] += 1

        elif pay == 10:
            money[5] -= 1
            money[10] += 1

        else:
            money[5] -= 1
            money[10] -= 1

        if min(money.values()) < 0:
            return 'false', i + 1

    return 'true', len(pays)


p = list(map(int, input().split(',')))
f, l = fun(p)
print('{},{}'.format(f, l))


第二题 80%,求指点
自己思路:从(0,0)点dfs,把所有可访问点加入visit集合中,最终如果右下角在集合内,说明可达,则返回1,否则返回0
"""
小明喜欢走地砖格,并且按照固定步长,某天小明通过一个部分铺设瓷砖的路,判断小明是否从左上角走到右下角
输入:
第一行步长s(s>0)
第二行为矩阵行M和列N(0 < M,N <= 100)
第三行开始为矩阵数值,0表示没地砖,不能走,1表示有砖,可以走
小明从左上角走到右下角(这两个位置保证为1)
输出:
可以通过返回1,否则返回0
"""

s = int(input())
M, N = map(int, input().split())
matrix = []
for i in range(M):
    matrix.append(list(map(int, input().split())))

# 可以通过返回1,不能通过返回0
direction = ((s, 0), (0, s), (-1 * s, 0), (0, -1 * s))
visited = set()


def go(i, j):

    if i < 0 or i >= M or j < 0 or j >= N or (i, j) in visited or matrix[i][j] == 0:
        return False

    visited.add((i, j))
    for d in direction:
        go(i + d[0], j + d[1])


go(0, 0)
if (M - 1, N - 1) in visited:
    print(1)
else:
    print(0)

第三题 91% 内存超了,求指点
自己思路:使用10的X模板,首先顺序输入字符串,同时遍历模板矩阵,只存放在1的位置,存放完毕后,再按列输出即可
"""
输入一个仅由大写字母组成的字符串string和一个指定的奇列数N
其中(1 < len(string) <= 2000), (3 <= N < 1000)
输出变形后的新字符串

例如:
输入:
EVERYTHINGGOESWELL,5
['E', 0, 0, 0, 'V']
[0, 'E', 0, 'R', 0]
[0, 0, 'Y', 0, 0]
[0, 'T', 0, 'H', 0]
['I', 0, 0, 0, 'N']
[0, 'G', 0, 'G', 0]
[0, 0, 'O', 0, 0]
[0, 'E', 0, 'S', 0]
['W', 0, 0, 0, 'E']
[0, 'L', 0, 'L', 0]
输出:
EIWETGELYORHGSLVNE
"""


string, N = input().split(',')
N = int(N)

base = [[0] * N for _ in range(N)]
for i in range(N):
    base[i][i] = 1
    base[i][N - i - 1] = 1
base = base[:-1]

template = []
x = len(string) // (2 * N - 3) + 1
for i in range(x):
    for j in base:
        template.append(j[:])


def next(i, j):
    if j == N - 1:
        return i + 1, 0
    else:
        return i, j + 1


i, j = 0, 0
for c in string:

    while template[i][j] != 1:
        i, j = next(i, j)
    template[i][j] = c


res = ''
for j in range(N):
    for i in range(len(template)):
        if template[i][j] not in [0, 1]:
            res += template[i][j]

print(res)


全部评论

(7) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

热门推荐