华为2020校招-软件题

一共3道编程题,总体难度不高,没有出现比较难的算法,但是可能文字和逻辑理解上相对比较重要。


第一题(难度不高 AC)

按规则传播信息,输出所有可能传播的站点对
输入:
A={1,3,5},B={2,4,6},R=1
输出:
(1,2)(3,4)(5,6)
def Toint(list):
    for i in range(len(list)):
        list[i]=int(list[i])

a = input().split('=')
A = a[1].split('}')[0][1:].split(',')
Toint(A)
B = a[2].split('}')[0][1:].split(',')
Toint(B)
R = int(a[-1])

for i in A:
    num=0
    for j in B:
        if i>j:
            continue
        else:
            if j-i<=R:
                num+=1
                print('(%d,%d)'%(i,j),end='')
            else:
                break
    if num==0:
        for j in B:
            if i<=j:
                print('(%d,%d)' % (i, j),end='')
                break

第二题(难度不高 AC)

句子按词进行反转,但是要注意各种特殊符号有不同的意义
输入:
I am an 20-years  out--standing @@ * -stu- dent
输出:
dent stu standing out 20-years an am I
def _test(word):
    key = word.split('-')
    res = []
    if len(key)==1:
        return key
    else:
        # print('>',key)
        i = 0
        while True:
            if i>=len(key)-1:
                break
            if key[i]!='' and key[i+1]!='':
                # 可能出现多个-的连接词
                res.append(key[i]+'-'+key[i+1])
                i+=2
            elif key[i]!='':
                res.append(key[i])
            i+=1
        if i==len(key)-1:
            if key[i]!='':
                res.append(key[i])
    # print(res)
    return res

def test2(string):
    a = []
    start = 0
    key = True

    for i in range(len(string)):
        if (string[i]>='a' and string[i]<='z') \
                or (string[i]>='A' and string[i]<='Z') \
                or string[i]=='-' \
                or (string[i]>='0' and string[i]<='9'):
            key = True
            continue
        else:
            if key:
                a.append(string[start:i])
                key = False
            start = i + 1
    if key:
        a.append(string[start:])
    return a

# print('a'>='a' and 'a'<='z')

a = input().split(' ')
# print(a)
res = []
for i in a:
    st = _test(i)
    res.append(st)
# print(res)

res1 = []
for i in res:
    for string in i:
        res1.extend(test2(string))

# print(res1)
res1.reverse()
# print(res1)
result = ''
for i in res1:
    if i !='':
        result= result+' '+i
print(result[1:])

第三题(80% 没考虑周全)

对原有航班进行更新,但更新过程会出现覆盖更新,以及同航班座位重复问题,需要分开保存数据
采用四个字典
一字典 pace1 存储 按元组进行检索的字典 (航班,座号):姓名 ->原座位表
二字典 pace2 存取 姓名:(航班,座号)->去除了人的重复
三字典 pace3 按照二字典 反向存储 得到(航班,座号):姓名 ->去除了座位的重复
四字典 存取各个航班中的座位号
输入:
3
CZ7132,A1,ZHANGSAN
CZ7132,A2,ZHAOSI
CZ7156,A2,WANGWU
2
CZ7132,A1,CZ7156,A2
CZ7156,A2,CZ7156,A3
输出:
CZ7132,A2,ZHAOSI
CZ7156,A2,ZHANGSAN
CZ7156,A3,WANGWU
# 进行字典的键值交换
def space(dic):
    dict_space = {}
    for i in dic.items():
        # print(i)
        for j in i[1]:
            dict_space[j]=i[0]
    return dict_space

# 进行字典的键值交换 保留了同姓名的不同航班
def space_name(dic):
    dict_space = {}
    for i in dic.items():
        # print(i)
        if i[1] not in dict_space:
            dict_space[i[1]]=[i[0]]
        else:
            dict_space[i[1]].append(i[0])

    return dict_space


N = int(input())
pace1 = {}

for i in range(N):
    a = input().split(',')
    pace1[(a[0],a[1])]=a[2]

pace2 = space_name(pace1)
new_pace ={}
# print(pace2)
M = int(input())
for i in range(M):
    a = input().split(',')
    # print(a)
    name = pace1[(a[0],a[1])]
    # print(name)
    key = [i[0] for i in pace2[name]]

    try:
        inde = pace2[name].index((a[0],a[1]))
        pace2[name][inde] = (a[2], a[3])
        new_pace[(a[2],a[3])]=name
    except:
        pace2[name].append((a[2], a[3]))

for name in pace2.keys():
    key = pace2[name].copy()
    se = {}
    for i in key:
        se[i[0]]=i
    new = []
    for i in se.keys():
        new.append(se[i])
    pace2[name]=new

# print(pace2)

pace3 = space(pace2)
# print('3',pace3)

pace4 ={}
for i in pace3.keys():
    hang = i[0]
    num = i[1]


    if hang not in pace4.keys():
        pace4[hang]=[num]
    else:
        pace4[hang].append(num)
# print(pace4)
hang_sort = list(pace4.keys())
hang_sort.sort()
# print(hang_sort)
for i in hang_sort:
    nums = pace4[i]
    nums.sort()
    # print(nums)
    for j in nums:
        print('%s,%s,%s'%(i,j,pace3[(i,j)]))

 

  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
BAT华为美团360谷歌等各大互联网公司软件校招面试笔试资料240MB合集: 2015年校招腾讯游戏策划笔试目.docx 2015年百度校招产品经理笔试目汇总.docx 2015年网易产品策划笔试.docx 2015年网易用户研究员笔试.docx 2015年阿里巴巴校招产品经理笔试.docx 【2013-15年腾讯校园招聘】腾讯产品策划类笔试面试整理.pdf 【2014年百度校园招聘】百度客户端产品设计师___产品经理___一面面经.pdf 【2014年谷歌校园招聘】腾讯产品笔试策划+经验.pdf 【2014腾讯校园招聘】腾讯产品策划运营类职位笔试和参考答案(非本人所写_转自网上下载资源).pdf 【2015年微软校园招聘】产品经理目汇总.doc(1).pdf 【2015年搜狐校园招聘】产品专员笔试.pdf 【2015年淘宝校园招聘】淘宝产品经理笔试.pdf 【2015年谷歌校园招聘】产品经理目汇总.pdf 六、互联网公司面试真 华为校园招聘笔试面试合集 去哪儿网校园招聘笔试面试合集 奇虎360校园招聘笔试面试合集 最新各互联网BAT等笔试面试真复习资料 百度校园招聘笔试面试合集 美团网校园招聘笔试面试合集 腾讯招聘笔试合集 阿里巴巴校园招聘笔试面试合集 1.Google校招与面经68页.pdf 1.京东校招与面经77页.pdf 1.微软校招与面经47页.pdf 1.甲骨文校招与面经45页.pdf 1.百度校招与面经87页.pdf 1.腾讯校招与面经185页.pdf 1.阿里巴巴校招与面经101页.pdf 2.大众点评校招与面经23页.pdf 2.搜狐校招与面经47页.pdf 2.携程校招与面经60页.pdf 2.新浪校招与面经43页.pdf 2.网易校招与面经76页.pdf 2.雅虎校招与面经96页.pdf 3.三星校招与面经65页.pdf 3.中兴校招与面经59页.pdf 3.华为校招与面经131页.pdf 3.小米校招与面经46页.pdf 3.惠普校招与面经49页.pdf 3.联想集团校招与面经84页.pdf 3.苹果校招与面经27页.pdf 【2013-15年腾讯校园招聘】腾讯产品策划类笔试面试整理.pdf 【2013-2015年迅雷校园招聘】迅雷近年产品经理笔试汇总.pdf 【2014年百度校园招聘】百度客户端产品设计师___产品经理___一面面经.pdf 【2014年谷歌校园招聘】腾讯产品笔试策划+经验.pdf 【2014腾讯校园招聘】腾讯产品策划运营类职位笔试和参考答案(非本人所写_转自网上下载资源).pdf 【2015年微软校园招聘】产品经理目汇总.doc.pdf 【2015年搜狐校园招聘】产品专员笔试.pdf 【2015年淘宝校园招聘】淘宝产品经理笔试.pdf 【2015年百度校园招聘】百度产品经理面经.pdf 【2015年谷歌校园招聘】产品经理目汇总.pdf 【2015腾讯校园招聘】新鲜出炉腾讯产品策划运营类笔经(带目).pdf 优衣库校招与面经241页.pdf

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值