华为机试支持python吗_4.10华为暑期实习生机试题目,python解答
第一題是給一個(gè)字符串,然后按照次數(shù)和ascii碼的順序,循環(huán)輸出。比如輸入eeefffggh,由于ascii的大小,e
'efgh' ?+ 'efg' ? + ?'ef' ? = ?'efghefgef'。字符串中可包含數(shù)字和大小寫(xiě)英文字母。
思路是先用dict統(tǒng)計(jì)個(gè)數(shù),然后將所有可能出現(xiàn)的字符放在一個(gè)數(shù)組里,維護(hù)起來(lái),
Whole = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E'
'F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T',
'U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i',
'j','k','l','m','n','o','p','q','r','s','t','u','v','w','x',
'y','z']
在dict中沒(méi)有的就直接刪除,然后再輸出。有的話,那么將字典中的該字符的個(gè)數(shù)-1。直到字典中所有字符的個(gè)數(shù)均為0。
然而AC了77.78%,然后報(bào)超時(shí),應(yīng)該是算法復(fù)雜度太高吧。
#coding=utf8
x = raw_input()
def Not_Null(dic): #根據(jù)字典中所有鍵值的和是否為0,判斷dict是否為空
sum = 0
for i in dic.values():
sum += i
if sum !=0: return True
else:
return False
leng = len(x)
dic = {}
for i in range(leng):
if x[i] not in dic:
dic[x[i]] =1
else:
dic[x[i]] +=1
Whole = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E'
'F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T',
'U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i',
'j','k','l','m','n','o','p','q','r','s','t','u','v','w','x',
'y','z']
res = ''
to_remove=[]
while (Not_Null(dic)):
for cha in Whole:
if cha not in dic or dic[cha] == 0:
to_remove.append(cha)
else:
dic[cha] -=1
for d in to_remove:
Whole.remove(d)
for cha in Whole:
res += cha
to_remove = []
print res
第二題是給一個(gè)數(shù)組,每個(gè)數(shù)字代表從數(shù)字的坐標(biāo)的位置最多能前進(jìn)的位數(shù)(比如[2,a,b],則從這里開(kāi)始,可以走1步到a,也可以走兩步到b),求到數(shù)組的末端所需要的最少的步數(shù)。
如:[2,3,2,1,2,1,5],最短的步驟是 2->2->2->5,或者2->3->2->5,都需要3步,所以輸出3。
這一題用的是DFS回溯法寫(xiě)的,AC了。在開(kāi)始做題的時(shí)候,想到可以從后往前思考, 應(yīng)該是動(dòng)態(tài)規(guī)劃的思想,但沒(méi)想出來(lái)。幸虧數(shù)組沒(méi)有太長(zhǎng)導(dǎo)致溢出。
#coding=utf8
N = int(raw_input())
num = []
for i in range(N):
num.append(int(raw_input()))
SUM = N - 1 #比如有7個(gè)數(shù),則累加和是6
min_count = 9999999 #在dfs中被當(dāng)做全局變量。
count = 0
def dfs(SUM,num,index,step):
global min_count
if SUM == 0:
if step <= min_count:
min_count = step #終止并賦值
return
if SUM < 0:
return #減多了,直接返回
else:
x = num[index]
for i in range(1,x+1):
if index + i <= len(num)-1: #判斷是否直接越界。
SUM -= i
index += i
step += 1
dfs(SUM,num,index,step)
SUM += i #在每一輪循環(huán)后,要退回去,回溯法!
index -= i
step -= 1
dfs(SUM,num,0,0)
print min_count
第三題,大數(shù)相乘。今年華為3.22機(jī)試的原題。。由于今天剛剛刷過(guò),所以電腦里有源代碼,就直接復(fù)制了。然后AC
參考的是 ?https://blog..net/u010983881/article/details/77503519 的方法二
num1 = raw_input()
num2 = raw_input()
sign1 = 1
sign2 = 1
if num1[0] == '-':
sign1 = -1
num1 = num1[1:]
if num2[0] == '-':
sign2 = -1
num2 = num2[1:]
leng1 = len(num1)
leng2 = len(num2)
ans =[0 for i in range(leng1 + leng2)]
for i in range(leng1):
for j in range(leng2):
mul = int(num1[i]) * int(num2[j])
ans[i+j+1] += mul
for i in range(leng1+ leng2 - 1, -1, -1):
if ans[i] >= 10:
ans[i-1] += ans[i] / 10
ans[i] = ans[i] % 10
res = ""
for bit in ans:
res += str(bit)
num_res = int(res) * sign1 * sign2
print str(int(num_res))
總結(jié)
以上是生活随笔為你收集整理的华为机试支持python吗_4.10华为暑期实习生机试题目,python解答的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: iOS 平台 Google Chat 聊
- 下一篇: 在python中strip_python