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,当成下标使用,所以就可以统一把下标当成“位置”了。