華為海思實習生4 15機試

2021-10-05 08:30:14 字數 4405 閱讀 5611

華為今天實習開始加了筆試,原本4.1接到筆試,因為沒有機器就沒接,現在改為4.15參加筆試,筆試分為三道題,分值分別是:100分, 200分, 300分。時間為2個小時,每週三的19:00 —— 21:00。兩個小時做完兩道題的也是大佬。渣渣我一般都是一道題,但是今年華為的這題和牛客上的完全不一樣,oc好艱難,後兩題沒有寫出來,貼上大佬的**。

做乙個投票機制,評選規則:

(1)票數最多者當選

(2)票數相同時,按照員工姓名排序,首字母越小越排前,a>b>c; a>b>c 如果姓名之間有包含關係,短名字排在長名字的前面:tom>tomy

輸入描述:

輸入為投票清單,用字串表示,投票姓名之間用英文逗號隔開,中間不含有空格,例如:tom,lily,jack,lucy

輸入要求:

(1) 員工名字只包含大小寫字母,首字母大寫,其他字母小些。

(2)總票數n:1示例1

輸入:tom,lily,tom,lucy,lucy,jack

輸出:lucy

說明:tom和lucy投票相同,lucy排序優於tom

示例2輸入:

tom,lily,tom,lucy,lucy,tom,jack

輸出:tom

說明:tom得票數最多

code:

import sys

def fun():

names = sys.stdin.readline().strip().split(",")

m = {}

def checkname(name):

first = name[0]

last = name[1:]

if ord('a') > ord(first) or ord('z') < ord(first):

return false

for each in last:

if ord('a') > ord(each) or ord('z') < ord(each):

return false

return true

for each in names:

if not checkname(each):

print("error.0001")

return

if each not in m.keys():

m[each] = 1

else:

m[each] += 1

star =

max_ticket = 0

for k in m.keys():

if m[k] > max_ticket:

max_ticket = m[k]

for k in m.keys():

star.sort()

print(star[0])

if __name__ == '__main__':

fun()

字串處理,當時看了只有思路,看了大佬的**,明白了。。。

輸入描述:

匹配關鍵字,帶匹配的字串

其中兩個字串之間通過乙個空格區分

輸出描述:

將每乙個匹配到的條目暫存器值,按照addr mask val的值先後順序,通過空格區分輸出,要包含0x或者0x且與輸入保持一致。

每乙個匹配的專案單獨一行,換行為\r\n,最後一項也增加換行。如果匹配失敗,輸出fail

示例1輸入

read read[ addr=0x17,mask=0xff,val=ox7], read_his[addr=0xff,mask=0xff,val=0x1],read[addr=0xf0,mask=0xff,val=0x80]

輸出:0x17 0xff 0x7

0xf0 0xff 0x80

code:

import sys

def fun():

key_word, words = sys.stdin.readline().strip().split(" ")

res =

words = words.split("],")

words[-1] = words[-1][:-1]

for each in words:

index = each.find('[')

key = each[:index]

each = each[index + 1:]

if key == key_word:

addr, mask, val = each.split(",")

addr_info = addr[5:]

mask_info = mask[5:]

val_info = val[4:]

try:

_ = int(addr_info, base=16)

_ = int(mask_info, base=16)

_ = int(val_info, base=16)

except valueerror:

continue

if len(res) == 0:

print("fail")

for each in res:

print(" ".join(each))

if __name__ == '__main__':

fun()

第三題是多叉樹的最大路徑和,用的回溯法,趕時間,就懶得優化了。最重要的乙個測試用例是在沒有入口函式的時候輸出r,否則只能過80%

(這個題我都沒時間做)

code:

import sys  

def fun():

def getpathsum(path):

size = 0

for each in path:

size += func_info[each][0]

return size

def backtrace(path, choice):

if len(choice) == 0:

return getpathsum(path)

size = 0

for each in choice:

if each in path:

print('r')

sys.exit()

if each not in func_info.keys():

print('na')

sys.exit()

res = backtrace(path, func_info[each][1])

size = max(size, res)

path.pop(-1)

return size

first = sys.stdin.readline().strip().split(" ")

first = [int(each) for each in first]

n = first[0]

func_info = {}

for i in range(n):

# build func info

temp_func = sys.stdin.readline().strip().split(" ")

func_num = int(temp_func[0])

func_stack = int(temp_func[1])

func_insert = [int(each) for each in temp_func[2:]]

func_info[func_num] = [func_stack, func_insert]

for each in func_info.keys():

if each in func_info[each][1]:

print('r')

sys.exit()

# 得到所有的入口函式

entrys =

for each1 in func_info.keys():

flag = true

for each2 in func_info.keys():

if each1 in func_info[each2][1]:

flag = false

break

if flag:

if len(entrys) == 0:

print("r")

sys.exit()

maxsize = 0

for each in entrys:

path = [each]

stacksize = backtrace(path, func_info[each][1])

maxsize = max(stacksize, maxsize)

print(maxsize)

if __name__ == '__main__':

fun()

還是要好好刷leecode,牛客上的華為108題太沒有代表性了。。

參考:

華為實習生筆試題及解答

3月27日做了華為筆試,3道題2小時。當時沒有拍照,現在憑記憶將題目和 敘述一遍,方便後人。前面將把三道題分別列一下,供後來者自己做。在後面說明一下自己的寫法 下面是各題做法和思路 第一題 題目說的比較複雜,讀懂題意之後大致是,9個字元一組,每組的第乙個字元是標誌位,後面8個字元是位址。如果標誌位是...

機試 2023年騰訊後台開發暑期實習生校招一面

有一棟100層高的大樓,給你兩個完全相同的玻璃球,假設從某一層開始丟下玻璃球會摔碎,怎麼利用手中的兩個玻璃球,用什麼最優策略 最少次數 知道這個臨界的層是第幾層 動態規劃。這個題目首先是關於 最優 的定義,考慮best worse case最壞情況下最優。記n層樓2球的問題為q n,2 對應的最壞情...

筆試面試 2015華為軟體開發實習生

簡單題 10個數字位取3個組成乙個三位數 不能重複 使得這三位數的值最大。方法 這個是送分題,我比較懶,直接用set 來存放,然後輸出後面三個位置的值來搞定 奇偶數排序問題 問題描述 一串無序的數字,先根據所以奇數的逆序排序,再輸出所有偶數的順序排序數值。方法 很簡單,基本兩個排序就可以搞定。最大的...