博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~
http://www.cnblogs.com/chenxiwenruo/p/6789205.html
特别不喜欢那些随便转载别人的原创文章又不给出链接的
所以不准偷偷复制博主的博客噢~

给出洗牌次数,以及洗牌的序列规则
第i个数shuffles[i]表示要将第i张牌移到第shuffles[i]个

很简单,就是
shuffle_seq[shuffles[i]]=start_seq[i];

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string.h>
using namespace std;
int start_seq[]; //洗牌前的序列
int shuffle_seq[]; //洗牌后的序列
int shuffles[]; //洗牌规则
string card[];
int main()
{
int k;
int n=;
char str[];
string s;
scanf("%d",&k);
for(int i=;i<=;i++){
//itoa(i,str,10);//会导致编译错误,在部分编译器上没法使用
sprintf(str,"%d",i);
s=str;
card[i]="S"+s;
}
for(int i=;i<=;i++){
sprintf(str,"%d",i-);
s=str;
card[i]="H"+s;
}
for(int i=;i<=;i++){
sprintf(str,"%d",i-);
s=str;
card[i]="C"+s;
}
for(int i=;i<=;i++){
sprintf(str,"%d",i-);
s=str;
card[i]="D"+s;
}
card[]="J1";
card[]="J2"; for(int i=;i<=n;i++){
scanf("%d",&shuffles[i]);
start_seq[i]=i;
}
for(int i=;i<=k;i++){
for(int j=;j<=n;j++){
shuffle_seq[shuffles[j]]=start_seq[j];
}
for(int j=;j<=n;j++){
start_seq[j]=shuffle_seq[j];
}
}
cout<<card[start_seq[]];
for(int i=;i<=n;i++){
cout<<" "<<card[start_seq[i]];
}
printf("\n");
return ;
}
05-03 21:38