问题描述

魔术师手中有A、2、3……J、Q、K十三张黑桃扑克牌。在表演魔术前,魔术师已经将他们按照一定的顺序叠放好(有花色的一面朝下).魔术表演过程为:一开始,魔术师数1,然后把最上面的那张牌翻过来,是黑桃A;然后将其放到桌面上;第二次,魔术师数1、2;将第一张牌放到这些牌的最下面,将第二张牌翻转过来,正好是黑桃2;第三次,魔术师数1、2、3;将第1、2张牌依次放到这些牌的最下面,将第三张牌翻过来正好是黑桃3;……直到将所有的牌都翻出来为止.问原来牌的顺序是如何的.

正确结果: [1, 8, 2, 5, 10, 3, 12, 11, 9, 4, 7, 6, 13]

解决方案

1. 列表
def solution_list():
pokers = [0 for _ in range(13)] # 初始化
count = len(pokers) # 纸牌总数
index = -1 for num in range(1, 14):
i = 0 # 计数
while i < num:
index = (index + 1) % count # 索引向前一步(可循环)
if pokers[index] == 0: # 当前元素为0时才计数, 不为0则跳过
i += 1
pokers[index] = num print('#' * 50)
print(f'\n牌组: {pokers}\n')
print('#' * 50)
2. 单循环链表
class Node:
"""节点""" def __init__(self, value):
self.data = value
self.next = None def __repr__(self):
return f'Node: {self.data}' class CircularLinkedList:
"""单循环链表"""
def __init__(self):
self.rear = None # 尾节点 def is_empty(self):
return self.rear is None def append(self, elem):
"""尾插法"""
temp = Node(elem)
if self.rear is None:
temp.next = temp
self.rear = temp
else:
temp.next = self.rear.next
self.rear.next = temp
self.rear = temp def print_all(self):
"""
按顺序打印全部节点
"""
if self.is_empty():
return
p = self.rear.next # 取得头部节点
print('Head', end='')
while True:
print('-->', p.data, end='')
if p is self.rear: # 到达尾部停止
break
p = p.next
print('-->Finish') def solution_circular_linked_list():
pokers = CircularLinkedList()
for _ in range(13):
pokers.append(0) temp = pokers.rear
for num in range(1, 14):
i = 0
while i < num:
temp = temp.next
if temp.data == 0:
i += 1
temp.data = num print('#' * 50)
print('\n牌组: ')
pokers.print_all()
print('\n' + '#' * 50)

最新文章

  1. 基于SS5服务端的Socks5客户端
  2. 还来一篇说下json_value 以及 json_query 的应用 (3)
  3. 国内开源的即时通讯框架 (endv.cn) (前言)
  4. Win7 64bit下32bit的 ODBC 数据源问题
  5. svn&#39;s diff command
  6. awesome-java
  7. java 泛型 窜讲
  8. 避免 TCP/IP 端口耗尽
  9. 关于form.item不兼容的问题
  10. Cobar是提供关系型数据库(MySQL)分布式服务的中间件
  11. Mobile Services 提交批量数据
  12. 关于div+css布局值得注意的地方
  13. KMS注册
  14. VC++ MFC程序设置以管理员权限运行
  15. python内置函数之attr【反射】
  16. SpringBoot配置——@PropertySource、@ImportResource、@Bean
  17. 【原创】uWSGI http和http-socket说明
  18. windows多线程(十一) 更安全的创建线程方式_beginthreadex()
  19. Hibernate Validation,Spring mvc 数据验证框架注解
  20. iOS中重用UITableView单元格时,千万别忘了这个

热门文章

  1. 2019-11-3:渗透测试,基础学习,bypass类型笔记
  2. 我的第一个python web 开发框架
  3. Java正则表达式Pattern和Matcher类
  4. Error : Program type already present: android.support.design.widget.CoordinatorLayout$
  5. python基本文件操作
  6. C语言l博客作业06
  7. 【java】使用java.util的【Collections】简化List创建
  8. gulp+webpack+angular1的一点小经验(第三部分使用一些angular1的插件ui-bootstrap与highcharts)
  9. Semaphore回顾
  10. Java 基于Spire.Cloud.Excel 将Excel转为PDF