UVA

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;
}
原文地址:https://www.cnblogs.com/cnsec/p/11830696.html