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.
Input Specification:
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.
Output Specification:
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.
Sample Input:1
22
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
Sample Output:1
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 | #include<iostream> |
写完之后看了一下代码觉得没什么错误,因为要输入的测试数据实在是太大,直接放PAT上测试,给我提示异常退出,因为是异常退出,所以估计都是什么溢出啊什么的,后来看是我初始化srcCards数组的时候,内层循环的++j写成++i了,实在是太不细心了。本题输入量比较大,如果一个个控制台下输,比较麻烦,这里分享一个程序,把数据拷贝到文本文档来,然后用程序来判断输出是否一致,这是一个我在别的地方看到的程序(我改成适应本题的程序,那个博客地址我给忘了,不然就放链接了)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#include<iostream>
#include<windows.h>
using namespace std;
int main()
{
system("00_5 < data.in > 1.out");
if(system("fc 1.out 2.out")) cout << "different" << endl;
system("pause");
return 0;
}
// 00_5是你自己程序的.exe前面的名字
//data.in是存放的本题的测试输入数据
//1.out 是我程序输出的结果
//2.out 是题目给的输出结果
//这里需要注意的是fc在linux下可以直接用,但是在windows下需要将C盘system32里的fc.exe拷贝到当前路径下,即你要测试的程序,fc.exe
//和这个程序要放在同一路径下才行,不然找不到。
一共5道测试题,前四道是昨晚写的,这道题是今晚回来写的,5道题加起来估计两小时写完的,还需提高!
| 测试点 | 结果 | 用时(ms) | 内存(kB) | 得分/满分 |
|---|---|---|---|---|
| 0 | 答案正确 | 1 | 308 | 12/12 |
| 1 | 答案正确 | 1 | 308 | 3/3 |
| 2 | 答案正确 | 1 | 180 | 2/2 |
| 3 | 答案正确 | 1 | 308 | 1/1 |
| 4 | 答案正确 | 1 | 256 | 2/2 |