您的位置:首页 > 其它

华为2019优招笔试经历----不堪回首的往事俩小时

2018-09-05 22:22 183 查看

6月份的时候,华为搞了个“菁英荟”,就赶紧屁颠屁颠的报了个名,结果挺幸运,被选中了,免简历筛选,优招邀请,虽然也没多大用,但是,这就够了,起码向前走了一小丢丢。作为一个机械狗,我是励志要去华为做算法。

华为的笔试题还算是很人性化,一共分为初级,中级,高级三道。因为华为在我的心目中还是很重要的,所以拿到题后,看了一下,比较简单,就有点小高兴,结果,总分600分,只得了66.7分,唉!都是泪,太激动了,结果第一道题就只有66.7%的通过率,一直找不到原因,结果就钻牛角尖了,没心思做其他题,一直在这道题上磨叽,最后时间用完了,到现在还没收到优招面试的通知,太伤心了,不,不是伤心,是心痛,华为对我来说,简直就像那种非他不“娶”的身份!在此,告诫各位同仁,千万别钻牛角尖,题不难,平常心就好。接下来分享一下经验吧!

第一道题:给出一个字符串,然后计算字符串中数字的和,如果数字前有‘-’号,如果是奇数个,按减算,如果是偶数数个,按‘+’算。因为我是一个机械狗,对高大上的c++,java不是很熟,就选用了Python。

拿到题后,没多想就啪啪啪的啪出一段代码,然后提交,发现只有66.7%的通过率,哇!我彻底惊了!这什么鬼,到底发生了什么?我就在这儿反复的看,反复检查,结果一个小时过去了,我还是没发现原因,因为这道题是最基础的,所以真的很慌,慌的一批,后面的两道题真实一点心思都没有,看了第二道题后,感觉还行,有思路,结果又啪啪了一段,交上去,通过率为0,这时候就不是慌了,这时候,要哭了。唉!心痛的一批。

具体代码如下:

[code]while True:
try:
s = input()
L = len(s)
i = 0
flag = 0
res = 0
while i <L:
num = 0
if s[i].isdigit():
pos = i
pre = i
while  i < L-1 and s[i+1].isdigit():
i += 1
while  pre >= 1 and s[pre-1] =='-':
num += 1
pre -= 1
if num % 2 == 0:
res += int(s[pos:i+1])
else:
res -= int(s[pos:i+1])
i+=1
print(res)

except:
break

另外一种比较简单的解法如 4000 下:

[code]while True:
try:
s = input()
ss = ''
L = len(s)
for i in range(L):
if s[i].isdigit():
ss += s[i]
if i < L-1 and not s[i+1].isdigit():
ss += '+'
if s[i] == '-':
ss += s[i]

print(eval(ss))
except:
break

直到刚才,我才发现,我哪儿错了,原来字符串中连着的数是要当做一个整数的。妈呀!天哪!不说了,头有点痛,先去包扎一下。......................................

接着说:

第二道题:两个最高项为4次的多项式,每项前面的系数为一个复数,即a+bi的形式,现在输入两个4次多项式的系数,最高项在前,实系数在前,形式如:a4,ai4,a3,ai3......b4,bi4.....。输出相乘后的多项式的系数,最高项在前,实系数在前。

[code]

while True:
try:
numbers = []
res = []
for i in range(20):
numbers.append(int(input()))
AR = ([0,0,0,0] + numbers[0:10:2])[::-1]
AI = ([0,0,0,0] +numbers[1:10:2])[::-1]
BR = ([0,0,0,0] +numbers[10:20:2])[::-1]
BI = ([0,0,0,0] +numbers[11:20:2])[::-1]
for i in range(8,-1,-1):
tempR = 0
tempI = 0
for j in range(i):
ar = AR[j]
ai = AI[j]
br = BR[i-j]
bi = BI[i-j]
tempR += ar*br-ai*bi
tempI += ar*bi + br*ai
res.append(tempR)
res.append(tempR)
for num in res:
print(num)

except:
break

第三道题:有一对奶牛,从出生后的第四年开始生小牛,每次生一对小牛,问现在有m对小牛,在第n年后有多少奶牛?

此题和其他的生兔子什么的都一样,只不过其开始的第一年是第一对奶牛开始生奶牛的那一年,因此在解此题是,需要在以往的递归中加上三年。

[code]while True:
try:
def cal(n):
if n == None:
return
if n <= 3:
return 1
return cal(n-1) + cal(n-3)#上一年的牛 + 今年出生的牛
m = int(input())
n = int(input())
num = m * cal(n+3)
print(num)
except:
break

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: