扑克牌打乱

题目描述

简单来说就是将给定的扑克牌按照所给的位序进行移位

一步到位

对位给定移位次数和位序数组lst,我们拿上面那个例子中的S3举例,S3移动两次位置,第一次移动到4(对应数组下标为3),第二次移动到3(对应数组下标为2),如果我把两次移动操作合为一次就相当于,在位序数组中使用第一次移动到的位序找到第二次移动到的位序,即lst[lst[4-1]-1]就是S3两次移动到的位置,推广到多次移动操作上为lst的嵌

num = int(input())#输入移位次数
lst = [int(i) for i in input().split()]#输入位序
lst.insert(0,0)#补位 为了让后面根据位序找值更好理解位序1就是数据下标1,位序2就是数组下标2

#初始化一副54的扑克牌
l1 = []
l1.append("0")#补位
for i in range(1,14):
    l1.append(f"S{i}")
for i in range(1,14):
    l1.append(f"H{i}")
for i in range(1,14):
    l1.append(f"C{i}")
for i in range(1,14):
    l1.append(f"D{i}")
l1.append("J1")
l1.append("J2")

#定义一个新数组用来存放移位后的结果
l2 = ["" for i in range(55)]

#根据移动次数计算最终各个元素下标
def location(num, lst, i):
    while num > 0:
        i = lst[i]
        num -= 1
    return i

for i in range(1,55):
    l2[location(num, lst, i)] = l1[i]#进行移位操作

for j in range(1,54):
    print(l2[j],end=" ")
print(l2[54])#最后一位输入不能带空格

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

lyc_QAQ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值