20200812 华为校招笔试

这次的题目明显比较简单...

第一题 模拟找钱

假设咖啡卖 5 元,每个客户可能给你 5、10、20 元的纸币,初始情况下你没有任何纸币,问是否能够找零。如果能找零就输出 true,总用户数, 否则输出 false,失败的用户index
例如:
5,5,5,10 => true,4
10,10 => false,1

就简单的记录一下各个纸币的数目就行:

def run1():
    moneys = list(map(int, input().split(',')))
    number_of_5 = 0
    number_of_10 = 0
    number_of_20 = 0
    for index, value in enumerate(moneys):
        if value == 5: # ok
            number_of_5 += 1
            continue
        elif value == 10: # return 5
            number_of_10 += 1
            number_of_5 -= 1
            if number_of_5 < 0:
                print('false,'+str(index + 1))
                return
        elif value == 20: # return 15
            number_of_20 += 1
            if number_of_10 > 0 and number_of_5 > 0:
                number_of_10 -= 1
                number_of_5 -= 1
            elif number_of_5 > 0:
                number_of_5 -= 3
                if number_of_5 < 0:
                    print('false,'+str(index + 1))
                    return
            else:
                print('false,'+str(index + 1))
                return
        else:
            print('false,'+str(index + 1))
            return

    print('true,'+str(len(moneys)))

第二题 走路

小明步长 l, 有一个 m x n 的矩阵, 1 表示能走 0 表示不能走,小明可以横着走竖着走,方向不限制,问小明能否从左上角走到右下角。

输入:

2
3 5
1 0 1 0 0
0 1 1 0 1
0 0 1 0 1`

输出:1

简单的 DFS,在此不表。

第三题 大 X 输出字符串

给定 X 的行数,按照 X 样式输出字符串:

例如:
EVERYTHINGGOESWELL,5 => EIWETGELYORHGSLVNE

E    V
 E  R
  Y
 T  H
I    N
...

就简单的输出一下:

def computeCol(n, i):
    if i < n:
        if i % 2 == 0:
            return i // 2
        return n - 1 - (i // 2)
    else:
        center = n // 2
        offset = (i - n) // 2 + 1
        if i % 2 != 0:
            return center - offset
        return center + offset

def run():
    string, length = input().split(',')
    length = int(length)
    result = [[] for _ in range(length)]
    for i, val in enumerate(string):
        result[computeCol(length, i % (2 * length - 3))].append(val)
    for i in result:
        for j in i:
            print(j, end = '')
    print('')
#笔经##华为#
全部评论
第三题这个题意表示没咋看懂
2 回复 分享
发布于 2020-08-13 14:56
第二题步长是固定的还是可以比这个小?
1 回复 分享
发布于 2020-08-12 21:57
的确简单了点
点赞 回复 分享
发布于 2020-08-12 20:46
这。
点赞 回复 分享
发布于 2020-08-12 21:00
第二题一直卡90.。。
点赞 回复 分享
发布于 2020-08-12 21:03
请问是华为什么部门呢 我在官网投递的岗位一直没有消息呢
点赞 回复 分享
发布于 2020-08-12 21:10
三道题,每道100分吗?是100分给过吗
点赞 回复 分享
发布于 2020-08-12 22:55
m
点赞 回复 分享
发布于 2020-08-12 22:56
这是什么语言c++?
点赞 回复 分享
发布于 2020-08-13 09:17
请问华为笔试多长时间呀  需要全部AC才有机会进入面试么
点赞 回复 分享
发布于 2020-08-13 14:48
大家都是应届生招聘么,投实习做题拿到100分算不算弱啊
点赞 回复 分享
发布于 2020-08-13 15:58
第二天给的那个矩阵应该不能走吧
点赞 回复 分享
发布于 2020-08-13 18:37
没参加笔试,贴个第三题代码(不知道有没有BUG...)~~ 希望自己的笔试的时候题也简单点🤣 void fun(string &str, int x) { vector<vector<char>> v; int l = 0, r = x - 1; int add_l = 1, add_r = -1; int k = 0, n = str.size(); while(k < n){ vector<char> tmp(x, ' &(5528)#39;); if(l == r){ add_l = -1; add_r = 1; tmp[l] = str[k++]; l--, r++; v.push_back(tmp); continue; } if(l == 0){ add_l = 1; add_r = -1; } tmp[l] = str[k++]; if(k == n){ v.push_back(tmp); break; } tmp[r] = str[k++]; v.push_back(tmp); l += add_l; r += add_r; } int m = v.size(); for(int i = 0; i < x; i++) for(int j = 0; j < m; j++){ if(v[j][i] != ' &(5528)#39;) cout<<v[j][i]; } cout<<endl; }
点赞 回复 分享
发布于 2020-08-14 09:48

相关推荐

耀孝女:就是你排序挂了
点赞 评论 收藏
分享
评论
9
77
分享
牛客网
牛客企业服务