1. 程式人生 > >華為2019優招筆試經歷----不堪回首的往事倆小時

華為2019優招筆試經歷----不堪回首的往事倆小時

6月份的時候,華為搞了個“菁英薈”,就趕緊屁顛屁顛的報了個名,結果挺幸運,被選中了,免簡歷篩選,優招邀請,雖然也沒多大用,但是,這就夠了,起碼向前走了一小丟丟。作為一個機械狗,我是勵志要去華為做演算法。

華為的筆試題還算是很人性化,一共分為初級,中級,高階三道。因為華為在我的心目中還是很重要的,所以拿到題後,看了一下,比較簡單,就有點小高興,結果,總分600分,只得了66.7分,唉!都是淚,太激動了,結果第一道題就只有66.7%的通過率,一直找不到原因,結果就鑽牛角尖了,沒心思做其他題,一直在這道題上磨嘰,最後時間用完了,到現在還沒收到優招面試的通知,太傷心了,不,不是傷心,是心痛,華為對我來說,簡直就像那種非他不“娶”的身份!在此,告誡各位同仁,千萬別鑽牛角尖,題不難,平常心就好。接下來分享一下經驗吧!

第一道題:給出一個字串,然後計算字串中數字的和,如果數字前有‘-’號,如果是奇數個,按減算,如果是偶數數個,按‘+’算。因為我是一個機械狗,對高大上的c++,java不是很熟,就選用了Python。

拿到題後,沒多想就啪啪啪的啪出一段程式碼,然後提交,發現只有66.7%的通過率,哇!我徹底驚了!這什麼鬼,到底發生了什麼?我就在這兒反覆的看,反覆檢查,結果一個小時過去了,我還是沒發現原因,因為這道題是最基礎的,所以真的很慌,慌的一批,後面的兩道題真實一點心思都沒有,看了第二道題後,感覺還行,有思路,結果又啪啪了一段,交上去,通過率為0,這時候就不是慌了,這時候,要哭了。唉!心痛的一批。

具體程式碼如下:

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

另外一種比較簡單的解法如下:

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.....。輸出相乘後的多項式的係數,最高項在前,實係數在前。



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年後有多少奶牛?

此題和其他的生兔子什麼的都一樣,只不過其開始的第一年是第一對奶牛開始生奶牛的那一年,因此在解此題是,需要在以往的遞迴中加上三年。

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