• [刷题] 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交替

  • 相关阅读:
    无root权限安装tmux
    mosquitto_pub和mosquitto_sub 命令参数说明
    安装Mosquitto学习MOTT协议
    Linux之prink原理
    JZ2440支持设备树(1)-添加设备树之后kernel的启动参数跟dts里面不一致
    Linux可以生产uImage
    Ubuntu18.04下make menuconfig缺少ncurses库
    如何打开kernel最开始的打印
    buildroot管理uboot+kernel+rootfs
    STM32L071CBTX操作ECC508
  • 原文地址:https://www.cnblogs.com/cxc1357/p/10750696.html
Copyright © 2020-2023  润新知