Stack 'em Up
题目大意
根据所给的数据 在第j位置的书i代表洗牌前的第i张牌在洗牌后位于第j张。
接下来是有若干行,每一行都有一个数k代表使用了第k种洗牌法。
解题思路
利用数值和花色的特点,将每一张牌对应一个0到51的数字,将数字“洗牌”后再输出对应的每一张牌。“洗牌”的方法是利用数组存放该位置上的牌。例如add[i]=j,代表第i位置上放着对应数字是j的牌。
#include<stdio.h>
int main()
{
int n,i,a,m,t,s,way[100][55],add0[55],add[55],c,d;
char value[13][7]={"2","3","4","5","6","7","8","9","10","Jack","Queen","King","Ace"};
char suit[4][10]={"Clubs","Diamonds","Hearts","Spades"};
scanf("%d",&n);
while(n--)
{
getchar();
for(i=0;i<52;i++)
add0[i]=i;
scanf("%d",&t);
s=0;
m=t;
while(t--)
{
for(i=0;i<52;i++)
{
scanf("%d",&d);
way[s][i]=d-1;
}
s++;
}
while(m--)
{
scanf("%d",&a);
for(i=0;i<52;i++)
add[i]=add0[way[a-1][i]];
for(i=0;i<52;i++)
add0[i]=add[i];
}
for(i=0;i<52;i++)
{
/*printf("%d
",add0[i]);*/
d=add0[i]/13;
c=add0[i]%13;
printf("%s of %s
",value[c],suit[d]);
}
if(n)
printf("
");
}
return 0;
}