剛做完華為的筆試題,簡要描述一下三道程式設計題的解決方法以及python**實現
第一題大致描述:
給定兩個已經公升序排序好的的序列a= 和b= ,乙個數r,找出滿足以下條件的的(ai,bj)序列對
1.ai<=bj
2.bj和ai兩者的距離 滿足 bj-ai<=r ,要是該條件不滿足,就從序列b中找出 和ai 距離最接近r的乙個點bj(同時要滿足條件1)
輸入樣例:a=,b=,r=1
輸出樣例:(1,2)(3,4)(5,6)
解決思路:遍歷所有序列對,找出滿足條件的對即可
**如下:(測試通過)
importsyss=sys.stdin.readline()
#獲取a、b、r的值,用正規表示式匹配會更容易
a=s.find('')
a_str=s[a+1:b].split(','
)a=[int(x) for x in
a_str]
a=s.rfind('')
b_str=s[a+1:b].split(','
)b=[int(x) for x in
b_str]
a=s.rfind('='
)r=int(s[a+1:])
res=
for x in
a: has_find=false
for y in
b:
if x<= y and y-x<=r:
has_find=true
elif x<=y and y-x>r and has_find==false:
break
for x in
res:
print('
({},{})
'.format(x[0],x[1]),end='')
第二題大致描述:
對一行給定的字串進行反轉輸出,同時去除中間不滿足條件的分隔符
輸入字串:i am an 20-years out--standing @ * -stu- dent
去除分割符並反轉之後,輸出字串(子字串以乙個空格隔開):dent stu standing out 20-years an am i
分割符描述如下:
1、除了字母、數字和 - 之外,其他的都是分割符,如輸入字串中的@ *等都屬於分割符
2、20-years中的'-' 表示的是連線符,即當『-』兩邊都有字母、數字時,『-』就屬於連線符,否則屬於分割符
3、out--standing中的『--』表示分割符,應該拆分為兩個字字串out 和 standing
解決思路:用棧去實現,遍歷輸入字串的字元:
1、遇到字母和數字就入棧。
2、遇到『-』的時候就判斷是分割符還是連線符,要是是分割符,就彈出所有棧元素,構成乙個子字串,否則就入棧
3、遇到其他分割符,彈出所有棧元素,構成子字串
找到所有子字串,就可以做反序輸出處理
python**如下:(測試通過)
importsys#
使用棧去解決問題
#s="i am an 20-years out--standing @ * -stu- dent"
s=sys.stdin.readline()
word=
res=
for x in
s: if'
0'<= x <='9'
or'a'
<=x <='z'
or'a'
<=x<='z'
:
elif x=='-'
:
if len(word)==0:
continue
else
:
if word[-1]=='-'
: word.pop()
''.join(word))
word =
else
:
else
:
if len(word)>0:
if(word[-1]=='-'
): word.pop()
''.join(word))
word=
if(len(word)>0):
if word[-1]=='-'
: word.pop()
''.join(word))
for s in res[::-1]:
print(s,end='
')
第三題大致描述如下:
給定多組原本的航班預訂資訊(航班號,座位號,乘客姓名),以及多組要改簽的航班資訊(原本航班號,原本座位號,新航班號,新座位號)
輸出最後的航班預訂資訊,要是有重複的內容,以最新改簽的為標準
輸入的內容如下: 3 表示原本的航班資訊數,2表示要改簽的航班數
3cz7132,a1,zhangsan
cz7132,a2,zhaosi
cz7156,a2,wangwu
2cz7132,a1,cz7156,a2
cz7156,a2,cz7156,a3
輸出內容如下:
cz7132,a2,zhaosi
cz7156,a2,zhangsa
cz7156,a3,wangw
解決思路,採用python的字典去表示機票位置資訊和乘客姓名的對應關係
old_booking_name_piao={}
sum_num=int(input())
for i in
range(sum_num):
msg=input()
m=msg.rfind(','
) piao=msg[0:m]
name=msg[m+1:]
old_booking_name_piao[name]=piao
old_booking_piao_name[piao]=name
chang_booking=
num=int(input())
for i in
range(num):
msg =input()
m = msg.split(','
) old = m[0]+'
,'+m[1]
new = m[2]+'
,'+m[3]
#print(old,new)
new_booking_name_piao_copy=old_booking_name_piao.copy()
for x in
chang_booking:
name=old_booking_piao_name[x[0]]
new_booking_name_piao_copy.pop(name)
new_booking_name_piao_copy[name]=x[1]
#print(new_booking_name_piao_copy)
for key,val in
new_booking_name_piao_copy.items():
print(val+'
,'+key)
2020華為筆試程式設計題
給定兩個字元集合,乙個為全量字符集,乙個為已占用字符集。已占用的字符集中的字元不能再使用,要求輸出剩餘可用字符集。輸入描述 輸入為乙個字串,字串中包含了全量字符集和已占用字符集,兩個字符集使用 連線,前面為全量,後面為已占用。已占用字符集中的字元一定是全量字符集中的字元。字符集中的字元跟字元之間用英...
京東2015校招筆試程式設計題
醜數問題,在 劍指offer 一書的182頁有詳細討論。簡單來說,就是 新的醜數總是以前的某個醜數乘以2 3或5產生,那麼分別用三個指標p2 p3和p5指向乘以2 3和5後能生成新的醜數的醜數,那麼下乙個醜數就是它們生成的新的醜數中最小的乙個。public static int kthnumber ...
網易2018校招筆試程式設計題
小易準備去魔法王國採購魔法神器,購買魔法神器需要使用魔法幣,但是小易現在一枚魔法幣都沒有,但是小易有兩台魔法機器可以通過投入x x可以為0 個魔法幣產生更多的魔法幣。魔法機器1 如果投入x個魔法幣,魔法機器會將其變為2x 1個魔法幣 魔法機器2 如果投入x個魔法幣,魔法機器會將其變為2x 2個魔法幣...