XDOJ期末考试题

XDOJ期末考试题

1.洗牌问题

54张钟,牌面分别为23456789 10、J、K、A、W.其中W有2 
张、包合两种花色,分别为red和that,其余牌面每种均有4张,包含四种花色,分别为
beat,spade,club,diamond.接下来执行洗牌操作,将牌的位置改变为指定位器。例有
5张牌,排列顺序为: heart-3. spade-K. dhb-10. damond-A. reds-W, 给定洗牌操作序列
{42531},即把heart-3放到4号位、spade-K放到2号位、clut-10放到5号位、damond-A
放到3号位、red-W放到1号位,于是排序就变成了red-W. spade-k,diamond-A, heart-3,
club-10.加果要将上面的洗牌操作执行第2,则最后的洗牌结果为club-10,spade-K,heart-3.
red-w,damand-A。
输入格式
第一行给出正整数N(1<N<54)表示纸牌的数量。随后N行表示N张牌的初始排列
信息,信息包括牌面和花色,以空格间隔。
接下来-行给出-一个正整数K(100),表示洗牌操作次数;最后-行给出洗牌操作序
列,包含N个正整数,正整数取值范围在154之间,以空格间隔。
输出格式
输出N行,给出N张牌的最后排列结果,每行给出-张牌的牌面和花色,以空格间隔。
输入样例
5
3 heart
K spade
10 club
A diamood
w red
2
4 2 5 3 1
输出样例
10 club
K spade
3 heart
w red
A diamood

#include <stdio.h>
#include <string.h>
int main()
{
	int n,b[54],m,i,j;
	char a[54][10];
	scanf("%d",&n);//输入牌的个数 
	getchar();//消除回车
	for(i=0;i<n;i++)
		gets(a[i]);//读入牌 
	scanf("%d",&m);//读入洗的次数 
	for(i=0;i<n;i++)
		scanf("%d",&b[i]);//读入洗的顺序 		
	int c[54];//输出顺序 起始为1 2 3 4... 
	for(i=0;i<n;i++)
		c[i]=i;
	for(j=0;j<m;j++)//洗牌循环 
	{	
		int d[54]={0};//中间数组 
		for(i=0;i<n;i++)
		{
			d[b[i]-1]=c[i]; 
		}
		for(i=0;i<n;i++)//改变输出顺序 
			c[i]=d[i];
	}
	for(i=0;i<n;i++)
		puts(a[c[i]]);

 } 
  • 14
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值