python随机发牌_魔术师发牌问题 -- python实现

本文介绍了如何使用Python解决魔术师发牌问题。通过列表和单循环链表两种方式,模拟从黑桃A到黑桃K的发牌过程,并得出原始牌序。正确结果为[1, 8, 2, 5, 10, 3, 12, 11, 9, 4, 7, 6, 13]。" 116428887,10604762,使用MVC架构实现登录注册功能详解,"['Java开发', 'Web开发', 'MVC框架', 'Servlet技术', '数据库交互']
摘要由CSDN通过智能技术生成

问题描述

魔术师手中有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,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值