热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

A1042ShufflingMachine20

题目描述:Shufflingisaprocedureusedtorandomizeadeckofplayingcards.Becausestandardsh

题目描述:

Shuffling is a procedure used to randomize a deck of playing cards. Because standard shuffling techniques are seen as weak, and in order to avoid "inside jobs" where employees collaborate with gamblers by performing inadequate shuffles, many casinos employ automatic shuffling machines. Your task is to simulate a shuffling machine.

The machine shuffles a deck of 54 cards according to a given random order and repeats for a given number of times. It is assumed that the initial status of a card deck is in the following order:

S1, S2, ..., S13, H1, H2, ..., H13, C1, C2, ..., C13, D1, D2, ..., D13, J1, J2

where "S" stands for "Spade", "H" for "Heart", "C" for "Club", "D" for "Diamond", and "J" for "Joker". A given order is a permutation of distinct integers in [1, 54]. If the number at the i-th position is j, it means to move the card from position i to position j. For example, suppose we only have 5 cards: S3, H5, C1, D13 and J2. Given a shuffling order {4, 2, 5, 3, 1}, the result will be: J2, H5, D13, S3, C1. If we are to repeat the shuffling again, the result will be: C1, H5, S3, J2, D13.

输入格式:

Each input file contains one test case. For each case, the first line contains a positive integer K (<= 20) which is the number of repeat times. Then the next line contains the given order. All the numbers in a line are separated by a space.

输出格式:

For each test case, print the shuffling results in one line. All the cards are separated by a space, and there must be no extra space at the end of the line.

输入样例:

236 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 H1 H2 C13 D2 D3 D4 H6 H3 D13 J1 J2 C1 C2 C3 C4 D1 S5 H5 H11 H12 C6 C7 C8 C9 S2 S8 S9 H10 D5 D6 D7 H4 H13 C5


题目翻译:

洗牌是一个打乱一副扑克牌的过程。因为标准的洗牌过程被视为弱点,并且为了避免赌场员工与赌徒进行的“内部合作”,许多赌场使用自动洗牌机。你的任务是模拟一个自动洗牌机。

这个机器按照随机顺序打乱54张牌,并重复这个过程N次(N为输入的次数)。假定卡牌的初始状态如下所示:

S1, S2, ..., S13, H1, H2, ..., H13, C1, C2, ..., C13, D1, D2, ..., D13, J1, J2

其中:

梅花 C黑桃 S红桃 H方块 D王牌 J

给定的顺序是[1,54]中不同整数的置换。如果第i个位置的数字是j,那么意味着把这张卡从位置i移动到位置j

举例说明:

假如现在我们只有五张卡:S3,H5 C1 D13 J2

给出一个洗牌顺序{4,2,5,3,1}

洗牌的结果为:J2 H5 D13 S3 C1

若再次执行这个顺序

则洗牌的结果为:

C1 H5 S3 J2 D13

输入格式:

第一行输入重复次数(小于等于20)

第二行输入给定的顺序

输出格式:

将洗牌结果打印在一行 空格隔开 行末不得有额外的空格

思路分析:

首先我们可以看到初始顺序是按照S1-13 H1-13 C1-13 D1-13 J1 J2排列的

这样就得到了【1,54】中每个数字与每张牌的对应关系如下:

S   1-13H  14-26C   27-39D   40-52J   53、54

我们不妨设一个char数组表示颜色:

char color[5]={'S','H','C','D','J'};

假设牌号为x(1<=x<=54)

那么(x-1)/13的结果则为花色对应的下标

(x-1)%13+1的结果则为所属花色下的牌号

我们现在假想只进行一次打乱操作:

原来的顺序是1 2 3 4 5..........54

给出的顺序是36 52 37 38 3 39.......47

那么操作非常简便:

建立一个int[55]数组 对应下标存储原始牌号 这样除了0下标 每一个下标均对应初始的牌号

然后从下标1开始 读取54个给出的数字覆盖原数组

这样这个int[55]数组就成为了 0  36  52  37  38.......

然后我们只需要从下标1开始按照花色与牌号对应关系打印出对映的牌

一次打乱操作与多次打乱操作的不同:

现在进行了一次打乱之后我们有这样一个int[55]数组:

0  36  52  37  38.......

那么此时我们需要进行第二次打乱操作

又输入了36  52  37  38.......这54个数

这次因为我们目前的数组已经是乱序了 不能再次进行简单的覆盖操作

而是需要根据下标进行查找

比如一轮打乱后首位是36 第36号牌是C10

此时要将这张C10从第一位再次换到36位 那么需要把这个数组中的第36号元素(的值)换成36

所以我们一共需要3个数组来进行这一系列操作



总结一下每一次打乱分为以下几步:

A数组存储原始排序 B数组存储输入的顺序 C数组为临时数组 这三个数组均假设从下标1开始

1.C[B[i]]=A[i]

给C数组的第B[i]个元素赋值A元素的对应值

举例说明:i=10 输入的第十个顺序元素为 30 原始排序中第十个元素为10

此时将临时数组的第30个元素的值存为10

这样如果只进行一次洗牌

按照下标遍历临时数组 当遍历到第30个元素的时候 读出的值为10 就相当于将原来的10号牌放到了第三十位

如果再进行洗牌 进行第二步操作:

2.A[i]=C[i]

此时A数组所存储的最初顺序已经不起作用

而此时刚才完成转换的C数组 就相当于这一次转换的“原始数组”


第三步:

3.按照格式输出


AC代码:#include #include char color[5]={'S','H','C','D','J'};int start[55],order[55],end[55];int main(){ int time=0; //输入需要打乱的次数 scanf("%d",&time); for(int i=1;i<55;i++) { start[i]=i; //初始化start数组 用1-54对应牌号 } for(int i=1;i<55;i++) { scanf("%d",&order[i]); //输入打乱顺序 } for(int j=0;j

注意点:

1.结尾不能有空格


推荐阅读
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 本文介绍了基于c语言的mcs51单片机定时器计数器的应用教程,包括定时器的设置和计数方法,以及中断函数的使用。同时介绍了定时器应用的举例,包括定时器中断函数的编写和频率值的计算方法。主函数中设置了T0模式和T1计数的初值,并开启了T0和T1的中断,最后启动了CPU中断。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 本文介绍了C函数ispunct()的用法及示例代码。ispunct()函数用于检查传递的字符是否是标点符号,如果是标点符号则返回非零值,否则返回零。示例代码演示了如何使用ispunct()函数来判断字符是否为标点符号。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
author-avatar
跌蕩起伏的2012_900
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有