扑克牌原始顺序问题
扑克牌原始顺序问题
已知有 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))
转载于网络 侵权联系作者立即删除QAQ