華為今天實習開始加了筆試,原本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 來存放,然後輸出後面三個位置的值來搞定 奇偶數排序問題 問題描述 一串無序的數字,先根據所以奇數的逆序排序,再輸出所有偶數的順序排序數值。方法 很簡單,基本兩個排序就可以搞定。最大的...