基於Python實現撲克牌面試題
阿新 • • 發佈:2020-01-09
這篇文章主要介紹了基於Python實現撲克牌面試題,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
據說是騰訊的面試題,以下是要求:
一副從1到n的牌,每次從牌堆頂取一張放桌子上,再取一張放牌堆底,直到手中沒牌。根據桌上的牌堆順序,輸出原先手中牌堆的順序陣列。
實現思路:
1、首先定義一個2維陣列,代表最後桌上的牌堆排列情況。內部陣列flist[i][0],flist[i][1]分別表示牌堆的排序和牌面的序號。
2、分n為奇數或偶數2種情況,用for迴圈逆推出原牌組的的順序值(順序為小數在下,大數在上)
3、對新陣列用順序值進行逆向排序後,輸出由牌面的序號組成的陣列
def cl(n): flst = [] #用陣列flst定義最後桌上的牌堆順序 for i in range(1,n+1): flst.append([i,i]) if n%2 == 0: #n為偶數情況 for t in range(1,int(n/2)+1): #t為迴圈次數,代表一次取牌放牌頂+牌底的過程 flst[n-t][0] = 2*t - 1 flst[t-1][0] = 2*t else: #n為奇數情況 flst[0][0]= 1 #新牌堆首張牌必定為原牌堆的最後一張 for t in range(1,n//2+1): flst[n-t][0] = 2*t flst[t][0] = 2*t + 1 olst = sorted(flst,key=lambda x: x[0],reverse=True) #對二維陣列進行排序 res = [i[1] for i in olst] #求得原牌組牌號 return res
最後測試列印結果
print(cl(10)) print(cl(11))
輸出正確
[5,6,4,7,3,8,2,9,1,10] [6,5,10,11,1]
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。