#include<stdio.h>
int main()
{
char mp[5]={'S','H','C','D','J'};
int k;
int start[55],end[55],change[55];
for(int i=1;i<=54;i++)
start[i]=i;
scanf("%d",&k);
for(int i=1;i<=54;i++)
{
scanf("%d",&change[i]);
}
for(int step=0;step<k;step++)
{
for(int j=1;j<=54;j++)
{
end[change[j]]=start[j];
}
for(int i=1;i<=54;i++)
{
start[i]=end[i];
}
}
for(int i=1;i<=54;i++)
{ if(i!=1) printf(" ");
end[i]--;
printf("%c%d",mp[end[i]/13],end[i]%13+1);
}
return 0;
}
这道题思路不是很难,对我来说有些需要注意的,比如每一次转换后要将end【】中的数据传给start【】,以便为下一次转移准备。这个我自己有想到,但程序写着就忘记了,下次做题要将思路记下来。还有就是花色转换,如果是start【i】=13,start【i】/13=1,这时花色就变成下一个花色了,所以需要先减一。for(int i=1;i<=54;i++) { if(i!=1) printf(" "); end[i]--; printf("%c%d",mp[end[i]/13],end[i]%13+1); }
`