UVA - 10205 Stack 'em Up

本文详细介绍了一种基于数组的洗牌算法实现,通过将扑克牌映射为0到51的整数,运用特定的洗牌方法,实现了牌序的重新排列。文章提供了完整的C语言代码示例,展示了如何读取输入并进行多次洗牌,最终输出洗牌后的牌序。

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\n",add0[i]);*/
		    d=add0[i]/13;
			c=add0[i]%13;
			printf("%s of %s\n",value[c],suit[d]);
		}
		if(n)
			printf("\n");
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值