版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fuckingone/article/details/82495294
英文题目也看懂了厉害୧(๑•̀◡•́๑)૭
思路:
1.由于输出要用花色表示,且每种花色有13张牌。可以存个数组,char hs[5]={'S','H','C','D','J'},对牌排序号,1-54号,
序号hs[(k-1)/13]即为对应花色。序号(k-1)%13+1为对应花色下的牌号。
2.洗牌。start[]和end[],把start[]按next[]的顺序排后,给end[]。然后把end[]赋给start[]。这样可以重复洗牌。
3.输出注意格式控制。if(i!=1) printf(" ")不是第一个牌,就输出空格,可以保证第二个到最后一个前面都有空格。
#include<cstdio>
#include<cstring>
const int N=54;
int main(){
int k;
char hs[5]={'S','H','C','D','J'};
int start[N+1],next[N+1],end[N+1];
scanf("%d",&k);
for(int i=1;i<=54;i++){
start[i]=i;
}
for(int i=1;i<=54;i++){
scanf("%d",&next[i]);
}
for(int step=0;step<k;step++){
for(int i=1;i<=54;i++){
end[next[i]]=start[i];
}
for(int i=1;i<=54;i++){
start[i]=end[i];
}
}
for(int i=1;i<=54;i++){
if(i!=1) printf(" ");
start[i]--;
printf("%c%d",hs[start[i]/13],start[i]%13+1);
}
return 0;
}