#include<iostream> #include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> #include<algorithm> #include<map> #include<vector> #include<queue> using namespace std; //start[]和end[]分别存放执行操作前和后的牌序,循环K次 //每次循环后用end[]覆盖start[]给下一次操作使用,start[]存放最终牌序 const int N=54; char mp[5]={'S','H','C','D','J'}; //牌的编号与花色的对应关系 //int start[N],end[N]; //int next[N]; //next数组存放每个位置上的牌在操作后的位置 int Start[N], End[N], Next[N]; int main(){ int K; scanf("%d",&K); //洗K次牌 for(int i=1;i<=N;i++){ Start[i]=i; //初始化牌的编号 } for(int i=1;i<=N;i++){ scanf( "%d", &Next[i] ); //输出每个位置的牌在操作后的位置 } for(int step=0;step <K;step++){ //执行K次操作 for(int i=1;i<=N;i++){ End[ Next[i] ] = Start[i]; //把第i个位置的牌的编号存于位置next[i] } for(int i=1;i<=N;i++){ Start[i]=End[i]; //把end数组赋值给start数组以供下次操作使用 } } for(int i=1;i<=N;i++){ if(i != 1) printf(" "); //控制输出格式 Start[i]--; printf("%c%d",mp[Start[i]/13] , Start[i]%13+1); //输出结果 } system("pause"); return 0; }