[刷题] PTA 7-43 Shuffling Machine

程序:

 1 #include<stdio.h>
 2 int main() {
 3     int i,n,*result;
 4     scanf("%d",&n);
 5     int shuffle[54],card1[54],card2[54];
 6     result = n%2==0?card1:card2;
 7     for(i=0; i<54; i++) {
 8         scanf("%d",&shuffle[i]);
 9     }
10     //初始化
11     for(i=0; i<54; i++) {
12         card1[i] = i;
13     }
14     //洗牌
15     /*
16     while(n) {
17         if(n%2==1) {
18             for(i=0; i<54; i++) {
19                 card2[shuffle[i]-1] = card1[i];
20             }
21         } else {
22             for(i=0; i<54; i++) {
23                 card1[shuffle[i]-1] = card2[i];
24             }
25         }
26         n--;
27     }
28     */
29     while(n){
30         for(i=0; i<54; i++){
31         card2[shuffle[i]-1] = card1[i];
32         }
33         n--;
34         if(n==0){
35             break;
36         }
37         for(i=0; i<54; i++){
38         card1[shuffle[i]-1] = card2[i];
39         }
40         n--;
41     }
42 
43     for(i=0; i<54; i++) {
44         if(result[i]/13==0) {
45             printf("%c%d",'S',result[i]%13+1);
46         } else if(result[i]/13==1) {
47             printf("%c%d",'H',result[i]%13+1);
48         } else if(result[i]/13==2) {
49             printf("%c%d",'C',result[i]%13+1);
50         } else if(result[i]/13==3) {
51             printf("%c%d",'D',result[i]%13+1);
52         } else {
53             printf("%c%d",'J',result[i]%13+1);
54         }
55         if(i<53) {
56             printf(" ");
57         }
58     }
59 }

分析:

此题用到的知识点有

1、数组:不定义字符数组,而是在输出时做判断,提高了程序效率

2、指针:最终输出的结果与洗牌次数有关,先定义一个指针,后期直接访问结果数组即可,避免了判断操作

3、三元运算符:节省代码量

4、循环语句:两个数组交替存储每次洗牌结果(注释中的程序是我一开始写的,有逻辑错误),不论最后洗多少次,都是1-2-1-2交替

 

posted @ 2019-04-22 15:59  cxc1357  阅读(231)  评论(0编辑  收藏  举报