華為2023年3月27日實習生筆試題及解答

2021-09-17 00:03:42 字數 3523 閱讀 4932

3月27日做了華為筆試,3道題2小時。當時沒有拍照,現在憑記憶將題目和**敘述一遍,方便後人。前面將把三道題分別列一下,供後來者自己做。在後面說明一下自己的寫法

下面是各題做法和思路:

第一題:題目說的比較複雜,讀懂題意之後大致是,9個字元一組,每組的第乙個字元是標誌位,後面8個字元是位址。如果標誌位是0,位址逆序,標誌位是1位址不變。輸入說明:乙個字串,有多組字元,中間沒有空格。輸出說明:輸出最後的位址,每組位址用空格隔開,最後乙個輸出不需要空格。

解答:第一題很簡單,9個一組得讀取,判斷第乙個是0還是1即可。5分鐘內即可ac。

# -*- coding:utf8 -*-

n = int(input())

strs = input()

for i in range(n):

s = strs[9*i:9*i+9] # 9個一組得讀取

if s[0] == '0':

s = s[1:]

s = s[::-1] # 逆序

else:

s = s[1:]

print(s, end=' ') # 空格輸出

第二題:簡而言之就是tsp問題。蜂巢在座標(0,0)的位置,有五處花叢,蜜蜂從蜂巢出發,要把五處花叢的花蜜採完再回到蜂巢,最短距離是多少。輸入說明:一行輸入,10個數分別是五處花叢的座標(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5),用空格隔開。輸出說明:輸出最短距離,距離向下取整。

解答:一開始就想到了全排列之後貪心演算法取最小,雖然覺得方法太low了,但是讓我一下子寫出蟻群之類的覺得記憶模糊就很糾結。後來發現這道題給了10秒的執行時間,妥妥的決定用全排列了。思路:先用全排列的方式獲取蜜蜂訪問5個花叢的所有可能順序,之後計算每個路徑長度取最小。

# -*- coding:utf8 -*-

from math import sqrt

line = input().strip().split()

n = list(map(int, line))

n = [int(i) for i in line]

nums = [[0,0], [n[0],n[1]], [n[2],n[3]], [n[4],n[5]], [n[6],n[7]], [n[8],n[9]]]

# 以下為插入的方式獲取全排列的**。沒看過別人的,自己想到的。

# 後來看網上說,遞迴獲取全排列更常見,有興趣的可以自己去搜一下。

order = [[1]]

for i in range(2,6):

lens = len(order)

j = 0

while j < lens:

for k in range(i-1):

tmp = order[j][:] #

order[-1].insert(k, i)

j += 1

# 接下來是製作距離矩陣

dist = [[0] * 6 for i in range(6)]

for i in range(6):

for j in range(6):

if dist[i][j] == 0:

dist[i][j] = sqrt((nums[i][0]-nums[j][0])**2 + (nums[i][1]-nums[j][1])**2)

else:

dist[i][j] = dist[j][i]

# 貪心演算法取最小

minval = 0

for path in order:

sums = dist[0][path[0]]

for i in range(4):

sums += dist[path[i]][path[i+1]]

sums += dist[path[4]][0]

if minval > sums or minval == 0:

minval = sums

print(int(minval))

解答:當時用的貪心演算法,只通過了70%,後來想到了動態規劃演算法,雖然沒試過但是個人感覺應該可以ac。和leetcode零錢兌換問題差不多的思路。

# -*- coding:utf8 -*-

# 40 * 50的方格

from random import randint

# 動態規劃演算法。對於乙個點,四種切法去除被切除的點即可獲得下一次的點集。加上1即可

def dp(points):

if len(points) <= 1:

return len(points)

first = points[0]

row = [i for i in points if i[0] != first[0]]

cntrow = dp(row)

col = [i for i in points if i[1] != first[1]]

cntcol = dp(col)

left = [i for i in points if i[2] != first[2]]

cntleft = dp(left)

right = [i for i in points if i[3] != first[3]]

cntright = dp(right)

return 1 + min(cntrow, cntcol, cntleft, cntright)

# 貪心演算法。假設只能選擇一種方式切,選擇刀數最少的

def greedyone(points):

x = [i[0] for i in points]

y = [i[1] for i in points]

l = [i[2] for i in points]

r = [i[3] for i in points]

return min(len(set(x)), len(set(y)), len(set(l)), len(set(r)))

n = int(input())

points =

for i in range(n):

line = input().strip().split()

x = int(line[0])

y = int(line[1])

l = y - x

r = x + y

'''# 此部分為隨機獲取點值,確定自己的動態規劃演算法是否最優

n = 15

for i in range(10):

points =

for j in range(n):

x = randint(0,40)

y = randint(0,50)

l = y - x

r = x + y

res1 = dp(points)

res2 = greedyone(points)

print('dp is %d, greedy is %d'%(res1, res2))

if res1 > res2:

print(points)

'''

2023年4月7日網易雷火資料探勘實習生筆試

今天參加了雷火資料探勘實習生筆試,做的實在太差,但是想記錄下來方便以後查漏補缺,要是有大神看見不要笑話哈,我知道自己是個渣渣 要是能提點建議就太感激了,不管是下面題目解決方面還是學習方面都歡迎。因為不是科班出身,在演算法 方面學習的非常緩慢,也害怕走彎路,畢竟在校學習時間不多了,迫切希望有效率的學習...

2023年2月27日訓練總結

既然鐵了心走acm這條路,就努力幹吧。先零碎的記一些做題的時候剛開始用的小知識點 isalpha,用於判斷輸入是否為英文,否時返回0,可在輸入一篇文章輸出其中英文單詞使用以跳過空格,符號等。tolower全部轉為小寫,相對的乙個toupper,小寫全部轉為大寫,標頭檔案為。resize可重新制定容器...

華為2023年實習生招聘考試試題

第一題 描述 目描述 編寫乙個函式,將字串中的大寫的字母 a z 挑出來,同時保留原字串中的空格,將挑出的大寫字母和空格按原始位置組成新的字串。例如 1 輸入 australia 輸出 aus 2 輸入 he is a dog 輸出 h i dg 執行時間限制 1 sec 記憶體限制 128 mby...