1. 程式人生 > 程式設計 >基於Python實現撲克牌面試題

基於Python實現撲克牌面試題

這篇文章主要介紹了基於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]

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。