PAT 1042

题目

就是一个纯考下标变换的题。给定了下一次对应节点的位置,给出变换的次数

思路和代码

  1. 以扑克牌的形式进行出题,所以每13张牌,数字前的字母都不一样,可以用1~54来表示每一张牌,然后通过取余的方式来获得对应的字母
  2. 输出的时候,如果直接使用取余数,则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;
    }
    
发布了57 篇原创文章 · 获赞 0 · 访问量 474
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览