1. 程式人生 > >2018秋招中國電信筆試題

2018秋招中國電信筆試題

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))