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 |
| Output | S7 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 |
解题思路
- 创建一个初始化字典用于表示初始牌序(键值对示例:{S1,1})
- 创建一个整型数接收洗牌次数,创建一个列表接收洗牌规则
- 在洗牌次数内,根据洗牌规则修改对应字典的键值
- 洗牌次数耗尽,按照(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

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

被折叠的 条评论
为什么被折叠?



