题目
给定纸牌堆,小明每次抽两张牌顺序压到牌堆最下面,此时翻看牌堆最上面的牌,并拿出牌堆。
重复此操作,小明能得到n个牌的数字。
假设已知小明看到的牌的顺序,求纸牌堆的原顺序。
输入:n,和n个数字,代表小明看到的牌顺序。
输出:纸牌原顺序。
示例:
4
1 2 3 4
输出
4 2 1 3
解法一:模拟
如果把未知的牌设成变量a、b、c、d,程序模拟翻看牌的时候,就能一一映射,模拟到最后能够得到答案。
解法二:倒序
既然已经给了正序的结果,那我原封不动按照逆序的操作还原这堆牌,就可以得到原来的牌了。
倒序如何对应呢?
从上方拿两张牌顺序压在下面:从下方拿两张牌顺序放回上面
打开最上面的牌记录并拿出:在牌顶放入一张牌
# n = map(int, input().strip().split())
# seq =[int(num) for num in input().strip().split()]
n = 4
seq =[1, 2, 3]
from queue import Queue
q=Queue()
for s in seq[::-1]:
q.put(s)
q.put(q.get())
q.put(q.get())
right=[]
while not q.empty():
right.append(q.get())
# print(q.get())
for r in right[::-1]:
print(r,end=' ')