本题关键:将字母映射成数字表示,之后用辅助数组即可完成操作
#include<iostream>
#include<cmath>
#include <cstdio>
#include<algorithm>
using namespace std;
const int N=54;
char mp[5]={'S','H','C','D','J'};
int start[N+1],rear[N+1],pos[N+1];
int main(){
int k;
cin>>k;
for(int i=1;i<=N;i++){
start[i]=i;
}
for(int i=1;i<=N;i++){
cin>>pos[i];
}
for(int s=0;s<k;s++){
for(int i=1;i<=N;i++){
rear[pos[i]]=start[i];
}
for(int i=1;i<=N;i++){
start[i]=rear[i];
}
}
cout<<mp[(start[1]-1)/13]<<start[1]%13;
for(int i=2;i<=N;i++)
printf(" %c%d",mp[(start[i]-1)/13],(start[i]-1)%13+1);
return 0;
}