题目
就是一个纯考下标变换的题。给定了下一次对应节点的位置,给出变换的次数
思路和代码
- 以扑克牌的形式进行出题,所以每13张牌,数字前的字母都不一样,可以用1~54来表示每一张牌,然后通过取余的方式来获得对应的字母
- 输出的时候,如果直接使用取余数,则13就无法输出了,所以可以定义一个char类型的数组mp然后从0~4分别表示每个字母,这样的话可以先令字符-1,然后对13取余。对于数字输出只需要对13取余再加一即可
#include<cstdio> const int N = 54; int start[N + 1]; int next[N + 1]; int end[N + 1]; char mp[5] = { 'S', 'H', 'C', 'D', 'J' }; int main() { int n; scanf("%d", &n); for (int i = 1; i <= N; i++) { start[i] = i; } for (int i = 1; i <= N; i++) { scanf("%d", &next[i]); } for (int i = 0; i < n; i++) { for (int j = 1; j <= N; j++) { end[next[j]] = start[j]; } for (int j = 1; j <= N; j++) { start[j] = end[j]; } } for (int i = 1; i <= N; i++) { start[i]--; printf("%c%d", mp[start[i] / 13], start[i] % 13 + 1); if (i != N) printf(" "); } return 0; }