扑克牌原始顺序问题

已知有 A-K 的十三张扑克牌,顺序未知,进行如下操作:

1)从牌堆底拿一张牌翻开放在桌子上;
2)从牌堆底拿一张放在牌堆顶;
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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃饭就会放大招

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值