天天看點

攜程2019-10-14第二批算法筆試題目及AC解答

求編輯距離

題目

輸入2個字元串,求出這兩個字元串的編輯距離,比如字元串A="攜程歡迎您",字元串B="歡迎你程裡人",如計算A="攜程歡迎您",字元串B="歡迎你程裡人",則輸入隻需要傳入一個字元串

攜程歡迎您<ctrip>歡迎你程裡人
           

樣例輸入

攜程歡迎您<ctrip>歡迎你程裡人
           

樣例輸出

6
           

提示

編輯距離是給定兩個字元串 A和 B,計算出将A轉換成B所使用的最少操作數,操作分别可以有:
插入一個字元
删除一個字元
替換一個字元
           

AC解答

def edit_dis(str1,str2):
    T = [[i+j for j in range(len(str2)+1)] for i in range(len(str1)+1)]
    for i in range(1,len(str1)+1):
        for j in range(1,len(str2)+1):
            if str1[i-1] == str2[j-1]:
                d=0
            else:
                d=1
            T[i][j] = min(T[i-1][j]+1,T[i][j-1]+1,T[i-1][j-1]+d)
    return T[len(str1)][len(str2)]

data = input().split('<ctrip>')
S1=data[0]
S2 =data[1]
print(edit_dis(S1,S2))
           

思路

當兩個字元串都為空串,那麼編輯距離為0;
當其中一個字元串為空串時,那麼編輯距離為另一個非空字元串的長度;
當兩個字元串均為非空時(長度分别為 i 和 j ),取以下三種情況最小值即可:
1、長度分别為 i-1 和 j 的字元串的編輯距離已知,那麼加1即可;
2、長度分别為 i 和 j-1 的字元串的編輯距離已知,那麼加1即可;
3、長度分别為 i-1 和 j-1 的字元串的編輯距離已知,此時考慮兩種情況,若第i個字元和第j個字元不同,那麼加1即可;如果不同,那麼不需要加1。
           

螺旋輸出

題目:

螺旋輸出矩陣數字。給定一個包含m行n列的矩陣,請按照順時針螺旋順序傳回矩陣内所有元素

輸入:

第一行:矩陣行數m,列數n,用空格隔開

其後m行:每一行的n個數字,用空格隔開

輸出:按順時針螺旋順序輸出矩陣内所有元素,以英文逗号分隔。


           

樣例輸入

3 3
1 2 3 
4 5 6
7 8 9
           

樣例輸出

1,2,3,6,9,8,7,4,5
           

AC解答

n = list(map(int,input().split()))[0]
data=[]

for i in range(n):
    temp_d = list(map(int,input().split()))
    data.append(temp_d)
    
res =[]

def transpose(matrix):
        new_matrix = []
        for i in range(len(matrix[0])-1,-1,-1):
            matrix1 = []
            for j in range(len(matrix)):
                matrix1.append(matrix[j][i])
            new_matrix.append(matrix1)
        return new_matrix
    
while len(data)>0:
        res = res + data[0]
        data.pop(0)
        if len(data)>0:
            data = transpose(data)
print(",".join(str(i) for i in res)) 

           

思路

每次記錄一行的數值,再利用轉置進行旋轉
           

算術平方根求解

題目

要求不能使用任何的數學庫函數,輸入一個數求該數的算術平方根,精确到小數點後 4位(四舍五入)。注:用數學庫函數不得分

輸入

輸入一個數字

輸出

輸出該數的算術平方根,精确到小數點後 4位(四舍五入)
           

樣例輸入

2
           

樣例輸出

1.4142
           

提示

保留小數點後4位,字尾0不删除
           

AC解答

n =int(input())
res=n**(1/2)
print('%.4f' % res)
           
上一篇: codeforces 538B
下一篇: codeforces 466C

繼續閱讀