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;
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值