A1042 Shuffling Machine(洗牌机)

1.牌的编号直接可以对应到花色上,所以只需用数组对编号进排序就好,不用考虑花色。

2.在进行编号与花色对应时,可以建立一个字符数组,编号通过运算对应到字符数组的下标,这样可以避免在输出时进行判断。编号为x,则mp[(x-1)/13]为花色,(x-1)%13+1为所属花色的编号

剪刀锤子布也是这样处理的,可以学习一下这种方法。          https://www.cnblogs.com/kimeina/p/14254569.html

#include <cstdio>
const int N=54;
char mp[5]={'S','H','C','D','J'};
int start[N+1],en[N+1],next[N+1];

int main(){
    int K;
    scanf("%d",&K);
    for(int i=1;i<=N;i++){
        start[i]=i;
    }
    for(int i=1;i<=N;i++){
        scanf("%d",&next[i]);
    }
    while(K--){
        for(int i=1;i<=N;i++){
            en[next[i]]=start[i];
        }
        for(int i=1;i<=N;i++){
            start[i]=en[i];
        }
    }
    for(int i=1;i<=N;i++){
        if(i!=1)    printf(" ");
        start[i]--;
        printf("%c%d",mp[start[i]/13],start[i]%13+1);
    }
    return 0;
}

自己做法:输出之前大同小异,输出时判断条件。

for(int i=1;i<=54;i++){
        if(after[i]<=13)
            printf("S%d",after[i]);
        else if(after[i]>13&&after[i]<=26)
            printf("H%d",after[i]-13);
        else if(after[i]>26&&after[i]<=39)
            printf("C%d",after[i]-26);
        else if(after[i]>39&&after[i]<=52)
            printf("D%d",after[i]-39);
        else
            printf("J%d",after[i]-52);
        if(i<54)
            printf(" ");
    }

 

posted on 2021-01-09 22:07  臭小孩  阅读(81)  评论(0)    收藏  举报

导航