感觉甲级的题目主要难在理解题意上

一、可借鉴的

1. 根据号码等分时,判断属于哪一类的

减1后再模

  1. switch((a-1)/13){
  2. ...
  3. }

2. 根据号码等分时,求指定号码在所在类的序号

  1. printf("%d",((start[i] - 1) % 13 + 1));

二、代码

  1. #include<cstdio>
  2. void change(int a)
  3. {
  4. switch((a-1)/13){
  5. case 0: printf("S");break;
  6. case 1: printf("H");break;
  7. case 2: printf("C");break;
  8. case 3: printf("D");break;
  9. case 4: printf("J");break;
  10. }
  11. }
  12. int main(){
  13. int K = 0;
  14. int next[55] = {};
  15. next[0] = 0;
  16. //输入K
  17. scanf("%d",&K);
  18. //输入位置
  19. for (int i = 1;i < 55;i++)
  20. {
  21. scanf("%d",&next[i]);
  22. }
  23. //初始化start[]
  24. int start[55];
  25. start[0] = 0;
  26. int end[55];
  27. end[0] = 0;
  28. for (int i = 1;i < 55;i++)
  29. {
  30. start[i] = i;
  31. }
  32. //执行K次
  33. for (int i = 0;i < K;i++)
  34. {
  35. //开始交换
  36. for (int j = 1;j <= 54;j++)
  37. {
  38. end[next[j]] = start[j];
  39. }
  40. for (int j = 1;j <= 54;j++)
  41. {
  42. start[j] = end[j];
  43. }
  44. }
  45. for (int i = 1;i < 55;i++ )
  46. {
  47. change(start[i]);
  48. printf("%d",((start[i] - 1) % 13 + 1));
  49. if (i!=54){printf(" ");}
  50. }
  51. }