题目
分析
这题目不难但是很烦,按建议使用了结构体。
代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
char name1[35], name2[35];
struct model
{
char name[35];
int point, played, win, tie, loss, diff, scored, against;
};
int cmp(const struct model a, const struct model b)
{
int i;
if (a.point >= b.point) {
if (a.point > b.point) return 1;
if (a.win >= b.win) {
if (a.win > b.win) return 1;
if (a.diff >= b.diff) {
if (a.diff > b.diff) return 1;
if (a.scored >= b.scored) {
if (a.scored > b.scored) return 1;
if (a.played <= b.played) {
if (a.played < b.played) return 1;
for (i = 0; i < strlen(a.name); i++) name1[i] = tolower(a.name[i]);
for (i = 0; i < strlen(b.name); i++) name2[i] = tolower(b.name[i]);
return strcmp(name1, name2) < 0;
}
}
}
}
}
return 0;
}
int main(void)
{
int i, j, n, t, g, g1, g2;
struct model team[35], tmp;
char tournament[105];
char goals1[5], goals2[5];
char buf[1005];
scanf("%d\n", &n);
while (n--) {
memset(team, 0, sizeof(team));
fgets(tournament, 105, stdin);
scanf("%d\n", &t);
for (i = 0; i < t; i++) {
fgets(team[i].name, 35, stdin);
team[i].name[strlen(team[i].name)-1] = '\0';
team[i].point = team[i].played = team[i].win = team[i].tie = team[i].loss = team[i].diff = team[i].scored = team[i].against = 0;
}
scanf("%d\n", &g);
while (g--) {
fgets(buf, 1005, stdin);
for (i = 0; buf[i] != '#'; i++) name1[i] = buf[i]; name1[i++] = '\0';
for (j = 0; buf[i] != '@'; i++, j++) goals1[j] = buf[i]; goals1[j++] = '\0';
for (j = 0, i+= 1; buf[i] != '#'; i++, j++) goals2[j] = buf[i]; goals2[j++] = '\0';
for (j = 0, i+= 1; buf[i] != '\n'; i++, j++) name2[j] = buf[i]; name2[j++] = '\0';
for (i = 0; strcmp(name1, team[i].name) != 0; i++);
for (j = 0; strcmp(name2, team[j].name) != 0; j++);
g1 = atoi(goals1);
g2 = atoi(goals2);
team[i].played++, team[i].scored += g1, team[i].against += g2;
team[j].played++, team[j].scored += g2, team[j].against += g1;
if (g1 == g2) {
team[i].tie++;
team[j].tie++;
} else if (g1 > g2) {
team[i].win++;
team[j].loss++;
} else {
team[i].loss++;
team[j].win++;
}
}
for (i = 0; i < t; i++) {
team[i].point = 3*team[i].win + team[i].tie;
team[i].diff = team[i].scored - team[i].against;
}
for (i = 0; i < t-1; i++)
for (j = 0; j < t-1-i; j++) {
/*printf("%d %d is compare-ing, result is %d\n", j, j+1, cmp(team[j], team[j+1]));*/
if (cmp(team[j], team[j+1]) == 0) {
tmp = team[j];
team[j] = team[j+1];
team[j+1] = tmp;
}
}
printf("%s", tournament);
for (i = 0; i < t; i++)
printf("%d) %s %dp, %dg (%d-%d-%d), %dgd (%d-%d)\n",
i+1, team[i].name, team[i].point,
team[i].played, team[i].win, team[i].tie, team[i].loss,
team[i].diff, team[i].scored, team[i].against);
if (n) printf("\n");
}
return 0;
}