PTA A1042 Shuffling Machine

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fuckingone/article/details/82495294

英文题目也看懂了厉害୧(๑•̀◡•́๑)૭

思路:

1.由于输出要用花色表示,且每种花色有13张牌。可以存个数组,char hs[5]={'S','H','C','D','J'},对牌排序号,1-54号,

  序号hs[(k-1)/13]即为对应花色。序号(k-1)%13+1为对应花色下的牌号。

2.洗牌。start[]和end[],把start[]按next[]的顺序排后,给end[]。然后把end[]赋给start[]。这样可以重复洗牌。

3.输出注意格式控制。if(i!=1) printf(" ")不是第一个牌,就输出空格,可以保证第二个到最后一个前面都有空格。

#include<cstdio>
#include<cstring>
const int N=54;
int main(){
  int k;
  char hs[5]={'S','H','C','D','J'};
  int start[N+1],next[N+1],end[N+1];
  scanf("%d",&k);
  for(int i=1;i<=54;i++){
    start[i]=i;
  }
  for(int i=1;i<=54;i++){
    scanf("%d",&next[i]);
  }
  for(int step=0;step<k;step++){
    for(int i=1;i<=54;i++){
      end[next[i]]=start[i];
    }
    for(int i=1;i<=54;i++){
      start[i]=end[i];
    }
  }
  for(int i=1;i<=54;i++){
    if(i!=1) printf(" ");
    start[i]--;
    printf("%c%d",hs[start[i]/13],start[i]%13+1);
  }
  return 0;
}

猜你喜欢

转载自blog.csdn.net/fuckingone/article/details/82495294