(C++)Shuffling Machine(思路与实现)

(C++)Shuffling Machine(思路与实现)题目描述 Shufflingisa Becausestand andinorderto insidejobs whereemploye

题目描述

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.


输入例子:

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 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

思路:

题目解析:这一道题题讲的是有一个顺序的牌,1到45,但是按照花色分类了。从左到右13张是S,  13张是H, 13张是C, 13张是D,13张是J。接下来一种操作,这种操作将牌的位置改变为指定位置,比如现在有54张牌,然后题目执行一个存放顺序,将第一张牌放到34号位置,将第二张牌放到23号位置上,当按照给出的一个放置顺序放完了,那么第一遍就放完了,然后题目中给出一个次数,也就是整个过程要执行多少次这样的顺序。

那么大题的思路则是:利用两个数组start和end数组,start数组存放的是从1到54的数,然后我将每次需要改变位置的数我放到end数组中,然后将end数组复制到这个start,然后进行第二遍的操作,这样一来,只要按照题中给的次数完了之后,最后start这个数组就是我们要的数组,然后我们根据数组中的值计算最后需要输出的(什么要计算:因为这个题目要求的输出带花色和数字),那么我们这样来做,首先创建一个保存花色的数组(字符数组){‘S’‘H’‘C’‘D’‘J’},然后我们就可以更具存的数字进行得到这个具体的花色,比如我这个是存的14,那么(14-1) / 13 == 1,(i - 1)/13那么我就知道14对应的花色是H,那么对应的数字呢?(i - 1) % 13 +1 == 1,那么综合下来就知道这个14号之前对应的就是H1.通过这种方式就很方便了。

实现:

#include 
       
         const int N = 54; char map[5] = {'S', 'H', 'C', 'D', 'J'}; int start[N + 1], end[N + 1], next[N + 1]; int main(){ int k; scanf("%d", &k); for(int i = 1; i <= N; i ++){ start[i] = i; } for(int i = 1; i <= N; i ++){ scanf("%d", &next[i]); } for(int step = 0; step < k; step ++){ for(int i = 1; i <= N; i ++){ end[next[i]] = start[i]; } for(int j = 1; j <= N; j ++){ start[j] = end[j]; end[j] = 0; } } for(int i = 1; i <= N; i ++){ char ch = map[(start[i] - 1) / 13]; printf("%c%d", ch, (start[i]-1) % 13 + 1); if(i < N){ printf(" "); } } } 
       











版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213313.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午6:07
下一篇 2026年3月18日 下午6:08


相关推荐

  • php header utf8 插入header(“Content-type: text/html; charset=utf-8”);「建议收藏」

    php header utf8 插入header(“Content-type: text/html; charset=utf-8”);「建议收藏」phpheaderutf8插入header(‘Content-type:text/html;charset=utf-8’);

    2022年6月30日
    28
  • 网站404页面怎么做

    网站404页面怎么做网站404页面怎么做?谈及网站404页面,诸多站长在网站运营的过程中,难以避免404页面的出现。404页面意味着网站存在死链接,当搜索引擎蜘蛛爬取此类网址的时候,应当反馈404状态吗,告知此URL网址已经失效,搜索引擎蜘蛛便会回馈到数据中心,从中清除数据。而在页面的前端,应该对访客予以信息提示,告知内容的已经不存在,优化相关搜索内容,尽可能避免降低访客体验度,由此可见,网站404页面的制作应当以两种出发点进行,即对于搜索引擎蜘蛛状态吗的正确回馈和对前端界面及内容设计出发。404网页正确设置网

    2022年7月27日
    6
  • React路由重定向Redirect[通俗易懂]

    React路由重定向Redirect[通俗易懂]react路由重定向<Switch>{/*<Routepath=”/”exactcomponent={NewsPage}/>*/}<Routepath=”/my”component={MyPage}/><Routepath=”/news…

    2022年4月30日
    44
  • SSD网络原理解析[通俗易懂]

    SSD网络原理解析[通俗易懂]SSD网络是继YOLO之后的one-stage目标检测网络,是为了改善YOLO网络设置的anchor设计的太过于粗糙而提出的,其设计思想主要是多尺度多长宽比的密集锚点设计和特征金字塔,下面我将详细的解析SSD网络结构SSD网络结构精简版详细版通过上面这个图,大家可以清楚的看到SSD的网络结构主要分为以下几个部分:VGG16BaseLayer ExtraFeatureLayer DetectionLayer NMS补充说明:在整个SSD网络中,其…

    2025年8月9日
    3
  • n8n 也能 AI 编程了?只需一个 MCP 客户端,直接让模型帮你搭工作流!

    n8n 也能 AI 编程了?只需一个 MCP 客户端,直接让模型帮你搭工作流!

    2026年3月15日
    3
  • visa仪表matlab,通过VISA接口获取安捷伦示波器捕获的波形

    visa仪表matlab,通过VISA接口获取安捷伦示波器捕获的波形CapturingawaveformfromanAgilentoscilloscopeoverastandardVISAinterfaceMATLABisasoftwareenvironmentandprogramminglanguagewithover1,000,000users.MATLABextendsthefunctionalityof…

    2022年10月12日
    10

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号