模拟题要的就是细心,忘了更新分数和,wrong了几次
#include<stdio.h> #include<stdlib.h> #include<string.h> int n,sum; struct op { char name[10]; int score; int id; }p[110]; int cmp(const void *a,const void *b) { struct op *c,*d; c=(struct op *)a; d=(struct op *)b; if(c->score!=d->score) return d->score-c->score; else return strcmp(c->name,d->name); } void NEW() { int i,scr; char str[10]; scanf("%s%d",str,&scr); for(i=0;i<n;i++) { if(strcmp(p[i].name,str)==0) break; } if(i<n) sum-=p[i].score;//更新和 strcpy(p[i].name,str); p[i].score=scr; sum+=scr; if(i==n) { n++; puts("A new record"); } else { puts("update succeed"); } } void AVERAGE() { if(n==0) printf("0.00\n"); else printf("%.2f\n",sum*1.0/n); } void MAX() { int i,k=1; if(n==0) { printf("0 0\n"); return ; } qsort(p,n,sizeof(p[0]),cmp); for(i=1;i<n;i++) if(p[i].score==p[0].score) k++; printf("%d %d\n",p[0].score,k); for(i=0;i<k;i++) printf("%s\n",p[i].name); } void DELETE() { char str[10]; int i; scanf("%s",str); for(i=0;i<n;i++) { if(strcmp(p[i].name,str)==0) break; } if(i==n) puts("no such record"); else { sum-=p[i].score; for(i;i<n;i++) { p[i]=p[i+1]; } n=n-1; puts("delete succeed"); } } int main() { char s[100]; n=0;sum=0; while(scanf("%s",s),strcmp(s,"QUIT")!=0) { if(s[0]=='N') NEW(); else if(s[0]=='A') AVERAGE(); else if(s[0]=='M') MAX(); else if(s[0]=='D') DELETE(); } return 0; }