知识点:结构体二级排序
#include <cstdio>
#include <cstdlib>
#include <cstring>
struct Player
{
char name[10];
int score;
}player[100];
inline int cmp(const void *a,const void *b)
{
Player *c=(Player *)a;
Player *d=(Player *)b;
if(c->score!=d->score) return d->score-c->score;
else return strcmp(c->name,d->name);
}
int main()
{
char fun[10];
char n[10];
int s,sum=0,i=0,j;
while(scanf("%s",fun)!=EOF)
{
switch(fun[0])
{
case 'N':
{
scanf("%s%d",n,&s);
for(j=0;j<i&&strcmp(player[j].name,n);j++);
if(j==i)
{
strcpy(player[i].name,n);
player[i].score=s;
sum+=s;
i++;
puts("A new record");
}
else
{
sum=sum-player[j].score+s;
player[j].score=s;
puts("update succeed");
}
}break;
case 'A':printf("%.2lf\n",i ? 1.0*sum/i : 0.00);break;
case 'M':
{
if(i)
{
qsort(player,i,sizeof(Player),cmp);
int cnt=1;
for(j=1;j<i;j++)
if(player[j].score==player[0].score) cnt++;
printf("%d %d\n",player[0].score,cnt);
for(j=0;j<cnt;j++)
puts(player[j].name);
}
else puts("0 0");
}break;
case 'D':
{
scanf("%s",n);
for(j=0;j<i&&strcmp(player[j].name,n);j++);
if(j==i) puts("no such record");
else
{
strcpy(player[j].name,player[i-1].name);
sum-=player[j].score;
player[j].score=player[i-1].score;
puts("delete succeed");
i--;
}break;
}
case 'Q':return 0;
}
}
return 0;
}