#include<cstdio>
#include<iostream>
using namespace std;
const int N=54;
char str[5]={'S','H','C','D','J'};
int main()
{
int K;
int startV[N+3],endV[N+3],next[N+3];
scanf("%d",&K);
for(int i=1;i<=N;i++){
startV[i]=i;
scanf("%d",&next[i]);
}
while(K--){
for(int i=1;i<=N;i++){
endV[next[i]]=startV[i];
}
for(int i=1;i<=N;i++){
startV[i]=endV[i];
}
}
for(int i=1;i<=N;i++){
if(i!=1) printf(" ");
startV[i]--;
printf("%c%d",str[startV[i]/13],startV[i]%13+1);
}
printf("\n");
return 0;
}
这道题实质是把一个数放到另一个位置,利用两个数组来操作可以避免一个数组操作的存放问题和访问问题,我自己写的时候犯了一个严重的错误。。。后来看了书上的感觉书上的代码写的很好。。