1042 Shuffling Machine (20分)

 1 #include <iostream>
 2 const int N = 54;
 3 using namespace std;
 4 int main()
 5 {
 6     char type[5] = { 'S','H','C','D','J' };//0-12:S, 13-25:H, 26-38:C, 39-51:D, 52-53:J
 7     int k,res[N],origin[N];//第i个位置的数据应该放到下标为origin[i]的位置,假如origin[0]为36,则第36个位置(下标为36)应该放置第0个位置的数据
 8     cin >> k;
 9     for (int i = 0; i < N; ++i) origin[i] = i;
10     int order[N];
11     for (int i = 0; i < N; ++i) cin >> order[i];
12     for (int i = 0; i < k; ++i)
13     {
14         for (int j = 0; j < N; ++j)
15             res[order[j]-1] = origin[j];//比如order[0]是30,则把origin[0]放到res[29]
16         for (int z = 0; z < N; ++z)//下一次循环,将res的结果作为origin的新结果
17             origin[z] = res[z];
18     }
19     for (int i = 0; i < N; ++i)
20     {
21         int t = res[i];
22         cout << type[t / 13] << t % 13+1;
23         if (i != N-1)
24             cout << ' ';
25     }
26     return 0;
27 }

 由于是根据res的值来输出的,res值的取值范围是0到53,即数组下标范围,所以origin存的是下标,origin直接给res赋值,res存的也是下标,order范围是1到54,用的时候减去1,当成下标使用,所以就可以统一把下标当成“位置”了。

原文地址:https://www.cnblogs.com/2020R/p/13151807.html