#include <stdio.h>
int main()
{
int K;
scanf("%d",&K);
char type[5] = {'S','H','C','D','J'};//牌的种类
int card[54] = {0};//牌
int order[54] = {0};//待输入的顺序
int save[54] = {0};//转换时存牌用
for(int i=0; i<54; i++){
scanf("%d",&order[i]);
card[i] = i + 1;//将card初始化为1-54
}
while(K != 0){
for(int i=0; i<54; i++)
save[order[i]-1] = card[i];//因为order是1-54,save下标与card一致,是0-53,所以order[i]-1
for(int i=0; i<54; i++)
card[i] = save[i];//将储存的新顺序给card,以进行下一轮洗牌
K--;
}//洗牌模块,执行K遍
for(int i=0; i<54; i++){
printf("%c%d",type[(card[i]-1)/13] , card[i]-((card[i]-1)/13)*13); //type同理要-1处理,再判断花色类型
if(i != 53) //牌是按照1-54储存,所以减去对应个数13再输出
printf(" ");
}
}
一开始真是一头雾水 ,代码及注释如上
Shuffling is a procedure used to randomize a deck of playing cards. Because standard shuffling techniques are seen as weak, and in order to avoid "inside jobs" where employees collaborate with gamblers by performing inadequate shuffles, many casinos employ automatic shuffling machines. Your task is to simulate a shuffling machine.
The machine shuffles a deck of 54 cards according to a given random order and repeats for a given number of times. It is assumed that the initial status of a card deck is in the following order:
S1, S2, ..., S13,
H1, H2, ..., H13,
C1, C2, ..., C13,
D1, D2, ..., D13,
J1, J2
where "S" stands for "Spade", "H" for "Heart", "C" for "Club", "D" for "Diamond", and "J" for "Joker". A given order is a permutation of distinct integers in [1, 54]. If the number at the i-th position is j, it means to move the card from position i to position j. For example, suppose we only have 5 cards: S3, H5, C1, D13 and J2. Given a shuffling order {4, 2, 5, 3, 1}, the result will be: J2, H5, D13, S3, C1. If we are to repeat the shuffling again, the result will be: C1, H5, S3, J2, D13.
(如果在第i个位置(输入54个顺序数字的位置)的数字是j,那么将第i个位置(当前牌的位置)的牌移动到第j个位置。举例:假如有五张牌:S3, H5, C1, D13 ,J2。给定一个洗牌顺序{4,2,5,3,1},结果将是J2, H5, D13, S3, C1(第一个顺序值对应第一张牌S3,顺序值为4,那么就将S3从第一个位置移动到第4个位置,以此类推)。如果我们重复洗牌.....(顺序仍然是{4,2,5,3,1}不变)
Input Specification:
Each input file contains one test case. For each case, the first line contains a positive integer K (≤20) which is the number of repeat times. Then the next line contains the given order. All the numbers in a line are separated by a space.
Output Specification:
For each test case, print the shuffling results in one line. All the cards are separated by a space, and there must be no extra space at the end of the line.