2018秋招中國電信筆試題
阿新 • • 發佈:2019-02-15
1.求一個32bit的數的反轉。
分析:1.考慮溢位問題,2.考慮尾部為0的反轉。
轉成字串進行反轉,然後再轉成整形,如果溢位則為0
def process(data):
result=0
data1 = int(data)
if data1 >= 0:
result=int(data[::-1])
else:
result=-1*int(str(-1*data1)[::-1])
if (result>2 ** 31-1) or (result<-2**31):
return 0
else :
return result
data=raw_input()
print process(data)
2.讀入一個自然數,將n的階乘結果的數值的每一位相加,返回相加結果。
例如 n=14,輸出結果為45.14!=87178291200,累加和為45.
分析:先計算階乘,然後分割數字,累加
data=int(raw_input())
num=reduce(lambda x,y:x*y,range(1,data+1))
print sum(map(int,str(num)))
3.設a,b,c,d均是0-9之間的數字,abcd,bcda是兩個四位數,且有abcd+bcda=8888.求滿足條件的所有a,b,c,d的值。
輸出描述:輸出所有滿足條件的a,b,c,d的值,a,b,c,d之間用空格隔開,每個輸出佔一行。
分析:a必須小於等於8,b必須小於等於8, d+a=8從而d必須小於等於8,b+c=8,c必須小於等於8.……
從而推出沒有進位。
a+b=8
a+d=8 b=d
b+c=8 a=c
b=8-a
很奇怪,直接輸出是顯示格式不正確,所以才存起來,再輸出的。
data=[]
for a in range(9):
c=a
b=d=8-a
data.append([a,b,c,d])
for i in data:
for j in i:
print j,
print
4.實現刪除字串中出現次數最少的字元,若多個字元出現次數一樣,則都刪除,輸出刪除這些單詞後的字串,保持原順序。
abcdd
dd
sssddfg
sssdd
分析:字典記錄每個字元出現次數,然後刪除最小的。
data=raw_input()
dict_data={}
for i in set(data):
dict_data[i]=data .count(i)
min_value=min(dict_data.values())
result=""
for i in data:
if dict_data[i]!=min_value:
result+=i
print result
5.給定兩個字串,求他們前後重疊的最長子串的長度,比如abcde和cdefg是cde長度為3,注意是前後重疊,比如abcdeh和cdefg中的cde不是前後重疊,長度為0;
分析:後重疊與前重疊其實就是交換字串位置。
提取data1的後字串與data2的前字串,相同則記錄並終止程式,交換一次後再進行一次,統計最大值。
def process(a,b):
max_num=0
left = len(a) - len(b) if len(a) - len(b) > 0 else 0
for i in range(left, len(a)):
right = len(a) - i
suba = a[i:i+len(a) - left]
subb = b[0:right]
print suba,subb
if suba == subb:
if len(suba) > max_num:
max_num = len(suba)
break
return max_num
data=raw_input().split()
a,b=data[0],data[1]
print max(process(a,b),process(b,a))