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("\n");
 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("\n");
 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("\n");
 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("\n");
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\n",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("\n");
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

猜你喜欢

转载自www.cnblogs.com/a982961222/p/12408888.html
今日推荐