PAT考试真题练习(甲级1042 Shuffling Machine) 2020-08-24

本文详细解析PAT甲级1042 Shuffling Machine题目的要求及解题思路,通过创建字典表示初始牌序,根据输入的洗牌次数和规则,调整牌序并输出最终结果。

PAT考试真题练习(甲级1042 Shuffling Machine)

 

题目要求

  • 规范输入(共两行):
    • 第一行输入一个正整数,表示洗牌的次数
    • 第二行输入54个正整数(空格隔开),表示洗牌规则
  • 规范输出:
    • 输出洗牌后54张牌的次序
  • 注意:
    • 纸牌表示方法:S3, H5, C1, D13, J2 分别表示 黑桃3,红桃5,梅花1,方块13和大王
    • 若洗牌规则为 {4, 2, 5, 3, 1}, 则上述牌序经一次洗牌后,为 C1, H5, S3, J2, D13
    • 未洗牌前的次序为 黑桃1-13,红桃1-13,梅花1-13,方块1-13,小王,大王

 

输入输出样例

  • 样例一:

Input

2
36 52 37 38 3 39 40 53 54 41 11 12 13 42 43 44 2 4 23 24 25 26 27 6 7 8 48 49 50 51 9 10 14 15 16 5 17 18 19 1 20 21 22 28 29 30 31 32 33 34 35 45 46 47

OutputS7 C11 C10 C12 S1 H7 H8 H9 D8 D9 S11 S12 S13 D10 D11 D12 S3 S4 S6 S10 H1 H2 C13 D2 D3 D4 H6 H3 D13 J1 J2 C1 C2 C3 C4 D1 S5 H5 H11 H12 C6 C7 C8 C9 S2 S8 S9 H10 D5 D6 D7 H4 H13 C5


解题思路

  1. 创建一个初始化字典用于表示初始牌序(键值对示例:{S1,1})
  2. 创建一个整型数接收洗牌次数,创建一个列表接收洗牌规则
  3. 在洗牌次数内,根据洗牌规则修改对应字典的键值
  4. 洗牌次数耗尽,按照(1-54)的键值输出所对应的键即可

 

代码实现(Python)

def find_key(number):
    for i in cards:
        if cards[i] == number:
            return i
def values_key():
    for i in cards:
        cards[i] += 54

cards = {'S1':1, 'S2':2, 'S3':3, 'S4':4, 'S5':5, 'S6':6, 'S7':7, 'S8':8, 'S9':9, 'S10':10,'S11':11,'S12':12,'S13':13,
         'H1':14,'H2':15,'H3':16,'H4':17,'H5':18,'H6':19,'H7':20,'H8':21,'H9':22,'H10':23,'H11':24,'H12':25,'H13':26,
         'C1':27,'C2':28,'C3':29,'C4':30,'C5':31,'C6':32,'C7':33,'C8':34,'C9':35,'C10':36,'C11':37,'C12':38,'C13':39,
         'D1':40,'D2':41,'D3':42,'D4':43,'D5':44,'D6':45,'D7':46,'D8':47,'D9':48,'D10':49,'D11':50,'D12':51,'D13':52,
         'J1':53,'J2':54}

times = int(input())
rules = list(map(int,input().split()))
for i in range(times):
    count = 55
    values_key()
    for k in rules:
        str_1 = find_key(count)
        cards[str_1] = k
        count += 1

cnt = 1
while True:
    if cnt == 55:
        break
    for i in cards:
        if cards[i] == cnt and cnt == 54:
            print(i)
            break
        elif cards[i] == cnt and cnt != 54:
            print(i,end=' ')
            break
    cnt += 1

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值