撲克牌原始順序問題


撲克牌原始順序問題

已知有 A-K 的十三張撲克牌,順序未知,進行如下操作:

1)從牌堆底拿一張牌翻開放在桌子上; 3)重復1、2的操作,直到十三張牌全部翻出為止。

如果要求翻開的牌是從 A-K 順序的,求開始牌堆的順序。

比如:原始序列為 2 3 1,經過上述操作后變為 1 2 3。

假設已知原始序列 2 3 1,操作過程為:

  • 堆底拿一張翻開:(開)1,(堆)2 3- 堆底拿一張放在堆頂:(開)1,(堆)3 2- 堆底拿一張翻開:(開)1 2,(堆)3- 堆底拿一張放在堆頂:(開)1 2,(堆)3- 堆底拿一張翻開:(開)1 2 3,(堆)空 而現在需要從已知的最終順序 1 2 3 反推原始序列 2 3 1,可以直接做和上面相反的操作:
  • 從翻開的牌面末尾拿一張放回堆底:(堆)3,(開)1 2- 堆頂拿一張放回堆底:(堆)3,(開)1 2- 從翻開的牌面末尾拿一張放回堆底:(堆)3 2,(開)1- 堆頂拿一張放回堆底:(堆)2 3,(開)1- 從翻開的牌面末尾拿一張放回堆底:(堆)2 3 1 在本題里,要求目標序列為 ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'],求原本的撲克牌順序,操作也是一樣的,每次從目標序列末尾取一個放回堆,然后將堆頂移到堆底即可。
def func(arr):
    n = len(arr)
    res= []
    for i in range(n):
        res.append(arr[n-1])  # 放回堆
        n -= 1
        top = res[0]
        del res[0]  # 刪除堆頂
        res.append(top)  # 堆頂添加到堆底 
    return res

if __name__ == '__main__':
    n = 5
    arr = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
    print(func(arr))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM