zoukankan      html  css  js  c++  java
  • PAT乙级1095-----解码PAT准考证 (25分)

    1095 解码PAT准考证 (25分)

    输入样例:

    8 4
    B123180908127 99
    B102180908003 86
    A112180318002 98
    T107150310127 62
    A107180908108 100
    T123180908010 78
    B112160918035 88
    A107180908021 98
    1 A
    2 107
    3 180908
    2 999
    
     

    输出样例:

    Case 1: 1 A
    A107180908108 100
    A107180908021 98
    A112180318002 98
    Case 2: 2 107
    3 260
    Case 3: 3 180908
    107 2
    123 2
    102 1
    Case 4: 2 999
    NA

    思路:
    1.对于类型1,使用结构体数组直接排序即可
    2.对于类型2,用数组下标作为考场号记录人数和成绩
    3.对于类型3,利用年月日考场号作为数组的四个下标进行输入,输出时将年月日对应的考场信息进行排序即可
    4.大数组要定义为全局变量
    5.类型2若人数为0要输出NA

    首次通过代码:
      1 #include<stdio.h>
      2 #include<stdlib.h>
      3 #include<string.h>
      4    int a3[100][13][32][1000]={0};
      5 struct student{
      6     char id[15];
      7     int score;
      8 };
      9 
     10 struct exam{
     11     int num;
     12     int p_sum;
     13 };
     14 
     15 void style1(struct student a1[],char x,int a1_sum[]){
     16     switch(x){
     17         case 'A':if(a1_sum[0]==0) {
     18                  printf("NA");
     19                  break;
     20                }
     21                else {
     22                   for(int j=0;j<a1_sum[0];j++) {
     23                       printf("%s %d",a1[j].id,a1[j].score);
     24                       if(j!=a1_sum[0]-1) printf("
    ");
     25                   }
     26                }
     27                   break;
     28         case 'B':if(a1_sum[1]==0) {
     29                  printf("NA");
     30                  break;
     31                }
     32                else {
     33                   for(int j=a1_sum[0];j<a1_sum[0]+a1_sum[1];j++) {
     34                       printf("%s %d",a1[j].id,a1[j].score);
     35                       if(j!=a1_sum[0]+a1_sum[1]-1) printf("
    ");
     36                   }
     37                }
     38                   break;
     39         case 'T':if(a1_sum[2]==0) {
     40                  printf("NA");
     41                  break;
     42                }
     43                else {
     44                   for(int j=a1_sum[0]+a1_sum[1];j<a1_sum[0]+a1_sum[1]+a1_sum[2];j++) {
     45                       printf("%s %d",a1[j].id,a1[j].score);
     46                       if(j!=a1_sum[0]+a1_sum[1]+a1_sum[2]-1) printf("
    ");
     47                   }
     48                   }
     49                   break;
     50             default:printf("NA");break;
     51        }
     52     }
     53 
     54 void style2(int a2_score[],int a2_sum[],char x[]){
     55     int y=0;
     56     for(int i=0;i<strlen(x);i++){
     57         if(x[i]>='0'&&x[i]<='9') y=y*10+x[i]-'0';
     58         else {
     59             printf("NA");return;
     60         }
     61     }
     62     if(a2_sum[y]==0) printf("NA");
     63     else printf("%d %d",a2_sum[y],a2_score[y]);
     64     return ;
     65 }
     66 
     67 
     68 
     69 int cmp1(const void *a,const void *b){
     70    struct student a1=*(struct student *)a;
     71    struct student b1=*(struct student *)b;
     72    if(a1.id[0]<b1.id[0]) return -1;
     73    else if(a1.id[0]==b1.id[0]){
     74        if(a1.score>b1.score) return -1;
     75        else if(a1.score==b1.score){
     76            return strcmp(a1.id,b1.id);
     77        }
     78        else return 1;
     79    }
     80    else return 1;
     81 }
     82 
     83 int cmp2(const void *a,const void *b){
     84    struct exam a1=*(struct exam *)a;
     85    struct exam b1=*(struct exam *)b;
     86    if(a1.p_sum>b1.p_sum) return -1;
     87    else if(a1.p_sum==b1.p_sum){
     88        if(a1.num<b1.num) return -1;
     89        else return 1;
     90    }
     91    else return 1;
     92 }
     93 
     94 void style3(int a3[]){
     95     int num1=0;
     96     struct exam s[1000];
     97    for(int i=0;i<1000;i++){
     98        if(a3[i]>0) {
     99         s[num1].num=i;
    100         s[num1].p_sum=a3[i];
    101         num1++;
    102        }
    103    }
    104    if(num1==0) {
    105     printf("NA");
    106     return ;
    107    }  
    108     else {
    109         qsort(s,num1,sizeof(struct exam),cmp2);
    110     }
    111   for(int i=0;i<num1;i++) {
    112       printf("%d %d",s[i].num,s[i].p_sum);
    113       if(i!=num1-1) printf("
    ");
    114   }
    115 }
    116 
    117 int main(){
    118    struct student a1[10005];
    119    int a1_sum[3]={0};
    120    int a2_sum[1000]={0};
    121    int a2_score[1000]={0};
    122 
    123    int sum1,sum2;
    124    int num=0;
    125    scanf("%d %d",&sum1,&sum2);
    126    for(int i=0;i<sum1;i++){
    127        struct student s1;int x=0;
    128        scanf("%s %d",s1.id,&s1.score);
    129        a1[num++]=s1;
    130        for(int j=1;j<4;j++){
    131            x=x*10+s1.id[j]-'0';
    132        }
    133        a2_sum[x]++;
    134        a2_score[x]+=s1.score;
    135        int year=(s1.id[4]-'0')*10+(s1.id[5]-'0');
    136        int month=(s1.id[6]-'0')*10+(s1.id[7]-'0');
    137        int day=(s1.id[8]-'0')*10+(s1.id[9]-'0');
    138        a3[year][month][day][x]++;
    139    }
    140    qsort(a1,num,sizeof(struct student),cmp1);
    141    for(int i=0;i<num;i++) {
    142        if(a1[i].id[0]=='A') a1_sum[0]++;
    143        else if(a1[i].id[0]=='B') a1_sum[1]++;
    144        else if(a1[i].id[0]=='T') a1_sum[2]++;
    145    }
    146    for(int i=0;i<sum2;i++){
    147        int ins1;char ins2[10];
    148        scanf("%d %s",&ins1,ins2);
    149        printf("Case %d: %d %s
    ",i+1,ins1,ins2);
    150        switch(ins1){
    151            case 1:if(strlen(ins2)==1) style1(a1,ins2[0],a1_sum);
    152                    else  printf("NA");
    153                    break;
    154            case 2:style2(a2_score,a2_sum,ins2);
    155                    break;
    156            case 3:if(strlen(ins2)!=6)
    157                  printf("NA");
    158                  else{
    159                      int flag=1;
    160                      for(int j=0;j<6;j++) {
    161                        if(ins2[j]>='0'&&ins2[j]<='9') ;
    162                        else {
    163                            flag=0;break;
    164                        }
    165                      }
    166                      if(flag) {
    167                          int x[1000];
    168                          int year=(ins2[0]-'0')*10+(ins2[1]-'0');
    169                          int month=(ins2[2]-'0')*10+(ins2[3]-'0');
    170                          int day=(ins2[4]-'0')*10+(ins2[5]-'0');
    171                          for(int j=0;j<1000;j++) x[j]=a3[year][month][day][j];
    172                          style3(x);
    173                      }
    174                  } 
    175                     break;
    176            default:break;
    177        }
    178        if(i!=sum2) printf("
    ");
    179    }
    180 }
    View Code

     参考:

    FROM:https://blog.csdn.net/qq_41325698/article/details/97903937#2.%E5%A4%A7%E6%95%B0%E7%BB%84%E4%B8%80%E5%AE%9A%E8%A6%81%E5%BC%80%E5%85%A8%E5%B1%80%EF%BC%8C%E8%80%8C%E4%B8%8D%E6%98%AF%E5%86%99%E5%9C%A8main%E5%87%BD%E6%95%B0%E9%87%8C%E9%9D%A2%E3%80%82

  • 相关阅读:
    Spring IoC容器
    Spring Bean定义
    Spring框架 体系结构,一个简单的Spring程序
    Spring基础知识汇总 Java开发必看
    mybatis 优缺点(优点和缺点)
    MyBatis:<selectKey> #keyProperty、keyColumn、order
    fatal: The upstream branch of your current branch does not match the name of your current branch
    808端口被 OneApp.IGCC.WinService.exe占用的问题
    浅析如何使docker容器可以进行ssh连接
    浅析如何为正在运行的容器添加端口映射
  • 原文地址:https://www.cnblogs.com/a982961222/p/12408888.html
Copyright © 2011-2022 走看看