前言

徘徊在保研与不保研之间,看了考研书感觉自己根本看不下去,看实验室同学都去了华为,因此就像报名了华为的秋招,报名了大数据开发岗,由于之前参加比赛学过hadoop等大数据框架,所以报了试试看,前几天通知了笔试,于是就去水了一波。

笔试介绍

华为今年的笔试和去年形式差不多,三道编程题,分值分别是100、200、300,语言基本上都可以使用,题目自我感觉很简单,因为都是一遍AC了,一个小时就解决了,hhh,就不吹了,下面记录记录题目和我的代码。

字符串处理题

题目是从一个字符串中找到所有存在的整数,包括负号,且负号可累计,然后将寻找到的整数相加即可,下面是代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# -*- coding: utf-8 -*-
import sys
numlist= [str(i) for i in (range(10))]
# print(numlist)
for line in sys.stdin:
a = line.split()
for i in a:
flag=True#当前数字为正
sum=0#当前和
num=0
for char in i:
if char == '-':
flag=not flag
elif char in numlist:
#数字处理
num=num*10+int(char)
else:
if flag:
sum+=num
else:
sum-=num
# sum+=num
# print(sum)
num=0
flag=True
if flag:
sum+=num
else:
sum-=num
print(sum)

卷积计算

题目是需要按照给定的规则,来计算带有复数的卷积,卷积定义网上也有,我就不赘述了,直接开模拟,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# -*- coding: utf-8 -*-
#coding=utf-8
import sys
class fuNum:
def __init__(self,x,y):
self.r=x
self.im=y

def add(self,b):
return fuNum(self.r + b.r, self.im + b.im)

def sub(self,b):
return fuNum(self.r - b.r, self.im - b.im)

def mult(self,b):
return fuNum(self.r * b.r - self.im * b.im, b.r * self.im + self.r * b.im)

if __name__ == "__main__":
duoa=[]
duob=[]
for i in range(5):
# 读取每一行
r = eval(sys.stdin.readline().strip())
im= eval(sys.stdin.readline().strip())
duoa.append(fuNum(r,im))
for i in range(5):
# 读取每一行
r = eval(sys.stdin.readline().strip())
im= eval(sys.stdin.readline().strip())
duob.append(fuNum(r,im))
for i in range(4):
duoa.append(fuNum(0,0))
duob.append(fuNum(0,0))
# n=4
duoc=[]
for n in range(9):
temp=fuNum(0,0)
for k in range(n+1):
# print(k,n)
temp=temp.add(duoa[k].mult(duob[n-k]))
# print(temp.r,temp.im)
duoc.append(temp)

# print(duoc)
for i in duoc:
print(i.r)
print(i.im)

牛生小牛的问题

传说中300分的题目,题目具体数据记不清了,是牛生小牛的问题,不过好像和经典例题的递归形式不同,这题我在思考的时候加上了dp的思想,因为用递归模拟,发现过不了样例,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# -*- coding: utf-8 -*-
#coding=utf-8
import sys
if __name__ == "__main__":
# 读取第一行的n
n = int(sys.stdin.readline().strip())

for i in range(n):
# 每一个例子
M = eval(sys.stdin.readline().strip())
N = eval(sys.stdin.readline().strip())
cheng=[M,M,M,M,M]
wei=[0,M,2*M,3*M,4*M]
for i in range(5,N+1):
cheng.append(cheng[i-1]+(wei[i-3]-wei[i-4]))
wei.append(wei[i-1]+cheng[i]-(wei[i-3]-wei[i-4]))
# print(i,cheng[i],wei[i])
print(cheng[N]+wei[N])

就这样三道题目就全部AC了,难度不是太大,感觉打过ACM的全AC是很正常的事情,所以对ACMer菊厂也是相当欢迎的。


后记

九月初拿到学校保研资格的那天,放弃了菊厂的面试,菊厂打了好几个电话来问,给人的感觉是相当负责的,当时和他们说等我研究生毕业再去菊厂了,哈哈哈,又装了13,溜了溜了看书了。