前几天在闲逛的时候,突然看到了一个关于扑克牌的题目,感觉还挺有意思,就试着分析了一下并用Python实现了一下。
贴出原题:
手中一幅扑克牌,假设顺序为ABCDEF,把第一张放到桌面上,第二张挪到最后,第三张放到桌面,第四张挪到最后,一直到所有牌都在桌面
BCDEF A
CDEFB
DEFB AC
EFBD
…把最后在桌面上的这副牌给你,求出原始牌的顺序
分析一下:
1. 排序牌面获得原始牌面
排序牌面:ACEBFD
桌面扑克牌 | 原始扑克牌 | 说明 |
---|---|---|
ACEBF | D | 拿出末尾最后一个D |
ACEB | FD | 拿出末尾最后一个F,放到D前面得到新牌面 |
ACE | BDF | 原始扑克牌重新排序(最后一个牌放到第一位),拿出末尾最后一个B,放到新排序牌面之前 |
AC | EFBD | 原始扑克牌重新排序(最后一个牌放到第一位),拿出末尾最后一个E,放到新排序牌面之前 |
A | CDEFB | 原始扑克牌重新排序(最后一个牌放到第一位),拿出末尾最后一个C,放到新排序牌面之前 |
ABCDEF | 获得原始牌面 |
从上边表格可以看出:初始ACEBFD经过6次之后获得ABCDEF。
代码实现:
# -*- coding:utf-8 -*-
# 把列表的最后一个元素放到第一位
def end_to_start(list=[]):
if len(list) <= 1:
pass
else:
list.insert(0, list[-1])
list.pop()
return list
aim_list = ['A',