扑克牌原始顺序问题

扑克牌原始顺序问题

已知有 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))
posted @ 2021-01-06 14:06  刘桓湚  阅读(1105)  评论(0编辑  收藏  举报