当前位置: 首页 > news >正文

PAT A1042. 洗牌机器

题目描述

有54张牌,编号为1~54,初始按编号从小到大排列。另外,这些牌按初始排列给定花色,即从左至右分别为13张S、13张H、13张C、13张D、2张J,如下所示:
s1, S2,…., S13,H1, H2,…, H13,C1, C2,.…, C13,D1, D2,…, D13,J1, J2
接下来执行一种操作,这种操作将牌的位置改变为指定位置。例如有5张牌S3, H5, C1,D13,J2,然后给定操作序列{4,2,5,3,1},因此把S3放到4号位、把H5放到2号位、C1放到5号位、D13放到3号位、J2放到1号位,于是就变成了J2,H5, D13, S3,C1。
现在需要将这种操作执行K次,求最后的排列结果。例如上面的例子中,如果执行第二次操作,那么序列J2, H5, D13,S3,C1就会变成C1,H5,S3,J2,D13。
 

输入样例

2
36 52 37 38 3 39 40 53 54 41 11 12 13 42 43 44 2 4 23 24 25 26 27 6 7 8 48 49 50 51 9 10 14 15 16 5 17 18 19 1 20 21 22 28 29 30 31 32 33 34 35 45 46 47


输出样例


S7 C11 C10 C12 S1 H7 H8 H9 D8 D9 S11 S12 S13 D10 D11 D12 S3 S4 S6 S10 HI H C13 D2 D3 D4 H6 H3 D13 J1 J2 CI C2 C3 C4 DI S5 H5 HI1 H12 C6 C7 C8 C9 S2 S8 S9 H1O D5 D6 D7 H4 H13 C5

学习收获

        ①将处理后的数组再一次赋值给原先的数组,这样可以复用数组。

        ②输出数组时,要想最后没有空格,可以先输出空格:除了第一个元素前面不输出空格,其余元素前面输出空格。

        ③ 一般来讲,题目中有大量数字,并且题目输出的数字是有规律时,需要找到数字间的规律。例如,这里找花色的规律:假设牌号为x,花色数组为mp[]={‘S’,‘H’,‘C’,‘D’,‘J’},则对应关系为mp[(x-1)/13]。花色下的编号为:(x-1)%13 +1。

代码实现 

#include<cstdio>

const int N = 54;
int main()
{
	
	int start[N+1],end[N+1],next[N+1];
	char mp[5]={'S','H','C','D','J'};//牌的编号与花色的对应关系 
	int K;
	scanf("%d",&K);
	
	for(int i=1;i<N+1;i++)
		scanf("%d",&next[i]);
		
	for(int i=1;i<N+1;i++)  //初始化:牌 
		start[i] = i;
	
	for(int j=0;j<K;j++)  //按照next顺序排序K次 
	{
		for(int i=1;i<N+1;i++)
		{
			end[next[i]] = start[i];
		}
		
		for(int i=1;i<N+1;i++)  //将end赋值给start,为下一次排序做准备 
		{
			start[i] = end[i];
		}
	}
	
	for(int i=1;i<N+1;i++)
	{
		if(i!=1)     //输出数组元素时,这样处理,最后没有空格 
			printf(" ");
		start[i]--;
		printf("%c%d",mp[start[i]/13],start[i]%13+1);  //编号与花色以及所属花色编号的转换 
	}
	
	return 0;	
} 

http://www.dtcms.com/a/11243.html

相关文章:

  • 数据库完整性基本概念及MySql语法
  • MYSQL数据库安装
  • SpringBoot整合SpringDataRedis
  • 使用Jetpack Compose和DummyJSON加速你的Android开发
  • Python Virtualenv:创建独立的 Python 开发环境
  • 天地图 uniapp使用笔记
  • dbForge Studioor MySQL v6 解锁版 安装教程(MYSQL数据库客户端)
  • ubuntu换镜像源方法
  • 课程设计---哈夫曼树的编码与解码(Java详解)
  • Stable diffusion 3 正式开源
  • 嵌入式硬件VS软件,到底哪个更难?
  • 详解 HBase 的安装部署及命令行操作
  • C语言从头学22——main( )函数
  • VMR,支持30+种编程语言的SDK版本管理器,支持Windows/MacOS/Linux。
  • 嵌入式开发十八:USART串口通信实验
  • 22种常用设计模式示例代码
  • Building wheels for collected packages: mmcv, mmcv-full 卡住
  • Mamaba3--RNN、状态方程、勒让德多项式
  • Vue CLI,Vue Router,Vuex
  • 如何配置node.js环境
  • Vue59-全局事件总线:任意组件间通信
  • 软件工程复习
  • 数据库 | 试卷五试卷六试卷七
  • 深圳中小企业融资攻略,贷款方法大盘点!
  • TIME_WAIT的危害
  • Flutter 中点击输入框之外的区域,进行失焦,收起键盘
  • 基于SSM的个人博客管理系统
  • ceph scrub 错误记录
  • 关于python的字节串与字符串的转换
  • 网络学习(15)|有http/1为什么还会有http/2