用python解华为“13张扑克牌抽取题目”

刚看到这个题目,稍微想了下,其实可以模拟抽牌的动作,最终求得这首扑克牌:【7,1,12,2,8,3,11,4,9,5,13,6,10】

"""
现有1~13共13张已按一定顺序正面朝上叠放好的扑克牌,将牌的第1张放到第13张后面,拿出此时牌的最上面的一张,放在桌子上;
再将手中牌的第1张放到最后,拿出牌的最上面的一张,放在桌子上,…,如此反复进行,直到手中的牌全部取出.
如果取出的牌的顺序正好是1,2,3,…,11,12,13,计算原牌。
"""

# 待抽取的牌的初始位置列表 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
cards_pos = range(1, 14)
print(cards_pos)
cards = [0]*13 # 牌的实际位置数组
cards_pos_final = [] # 抽出的牌的最终位置顺序

while len(cards_pos) > 0:
    card1 = cards_pos[0]
    if len(cards_pos) == 1:
        cards_pos_final.append(card1)
        break
    card2 = cards_pos[1]
    del cards_pos[0]
    del cards_pos[0]
    cards_pos.append(card1)
    cards_pos_final.append(card2)

# [2, 4, 6, 8, 10, 12, 1, 5, 9, 13, 7, 3, 11]
# 顺序抽取的牌列表,即第2张对应最后的1,第4张对应最后的2,以此求出最初的牌
print(cards_pos_final)

for i in xrange(len(cards_pos_final)):
    index = cards_pos_final[i]
    cards[index - 1] = i+1

print(cards) # 7,1,12,2,8,3,11,4,9,5,13,6,10
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值