题意:读取比赛结果,按积分,净胜球,进球数等的积分排名输出。。。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct Team
{
char name[50];
int b,c,d,e,f,g,h,i;
}team[50];
int n,t,g;
int find(char *str)
{
for (int i = 0 ; i < t ; i++)
if (strcmp(str,team[i].name) == 0)
return i;
return 0;
}
void Up(char *str)
{
int len = strlen(str);
for (int i = 0 ; i < len ; i++)
if (str[i] >= 'A' &&str[i] <= 'Z')
str[i] += 32;
}
int cmp(const void *_a,const void *_b)
{
struct Team *a = (struct Team*)_a;
struct Team *b = (struct Team*)_b;
if (a->b != b->b)
return b->b - a->b;
if (a->d != b->d)
return b->d - a->d;
if (a->g != b->g)
return b->g - a->g;
if (a->h != b->h)
return b->h - a->h;
if (a->c != b->c)
return a->c - b->c;
char ta[50],tb[50];
strcpy(ta,a->name);
strcpy(tb,b->name);
Up(ta);
Up(tb);
return strcmp(ta,tb);
}
int main()
{
char tName[105];
scanf("%d",&n);
getchar();
while (n--)
{
gets(tName);
memset(team,0,sizeof(team));
scanf("%d",&t);
getchar();
for (int i = 0 ; i < t ; i++)
gets(team[i].name);
scanf("%d",&g);
getchar();
while (g--)
{
char ch,a[50],b[50];
int x = 0,w,l;
while (ch = getchar())
{
if (ch == '#')
break;
a[x] = ch;
x++;
}
a[x] = '\0';
scanf("%d",&w);
getchar();
scanf("%d",&l);
getchar();
gets(b);
int aa,bb;
aa = find(a);
bb = find(b);
team[aa].c += 1;
team[bb].c += 1;
team[aa].h += w ;
team[bb].h += l ;
team[aa].i += l ;
team[bb].i += w ;
team[aa].g = team[aa].h - team[aa].i ;
team[bb].g = team[bb].h - team[bb].i ;
if (w > l)
{
team[aa].b += 3;
team[aa].d += 1;
team[bb].f += 1;
}
else if (w == l)
{
team[aa].b += 1;
team[bb].b += 1;
team[aa].e += 1;
team[bb].e += 1;
}
else
{
team[bb].b += 3;
team[bb].d += 1;
team[aa].f += 1;
}
}
qsort(team,t,sizeof(team[0]),cmp);
printf("%s\n",tName);
for (int i = 0 ; i < t ; i++)
printf("%d) %s %dp, %dg (%d-%d-%d), %dgd (%d-%d)\n", i+1, team[i].name, team[i].b, team[i].c, team[i].d, team[i].e, team[i].f, team[i].g, team[i].h, team[i].i);
if (n > 0)
printf("\n");
}
return 0;
}