模拟题要的就是细心,忘了更新分数和,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;
}