#include<cstdio>
const int N=5;
char mp[5]={'S','H','C','D','J'};//牌的编号与花色对应关系
int start[N+1],end[N+1],next[N+1];//next数组存放每个位置上的牌在操作后的位置
int main(){
int K;
scanf("%d",&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); //输出结果
}
return 0;
}
经验
1,对于1 2 3 4 5 6 7 8 9...的输入可以通过for循环实现,如果输入固定的话也可以scanf("%d %d %d",&a,&b,&c);
而对于1,2,3,4,5,6的输入可以通过scanf("%d,%d,%d",&a,&b,&c);实现,两个%d之间是什么,输入的时候就是什么。
2,对于S1,我一开始想到的是用char[]存储,后来发现,char[]智能存储单个字符,后来我又想是不是用string,实际上用
char[]int[]两者结合实现,对于以后很多类似的都可以有借鉴。
3,对于54张牌,采用1-54编号,实际上题目中已经给了提示,而我开始的思路是S1-S13,H1-13,是练题少了。
4,本题思路并不难,只是在实现的过程中对细节把握不好,希望自己再接再厉。