首页 > 其他 > 详细

【杭电acm】1225 Football Score

时间:2014-03-22 19:09:05      阅读:471      评论:0      收藏:0      [点我收藏+]

这种结构体排序的题,十分容易考上机题,qsort+结构体解决。马上就要机考了,多练习一下这样的题目也好。

bubuko.com,布布扣
 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 
 5 #define MAXNUM  100
 6 #define NAMENUM 20
 7 #define WIN     3
 8 #define DRAW    1
 9 
10 typedef struct {
11     char name[NAMENUM];
12     int in, lost;
13     int score;
14 } team_st;
15 
16 team_st teams[MAXNUM];
17 int total;
18 
19 int isExist(char name[], int n) {
20     int i;
21     for (i=0; i<n; ++i)
22         if (strcmp(teams[i].name, name) == 0)
23             return i;
24 
25     return -1;
26 }
27 
28 void check(char name[], int in, int lost) {
29     int index = isExist(name, total);
30 
31     if (index == -1) {
32         strcpy(teams[total].name, name);
33         index = total;
34         total++;
35     }
36     teams[index].in += in;
37     teams[index].lost += lost;
38     if (in > lost)
39         teams[index].score += WIN;
40     if (in == lost)
41         teams[index].score += DRAW;
42 }
43 
44 int comp(const void *a, const void *b) {
45     team_st *p1 = (team_st *)a;
46     team_st *p2 = (team_st *)b;
47     if (p1->score != p2->score)
48         return p2->score - p1->score;
49     else if ((p1->in-p1->lost) != (p2->in-p2->lost))
50         return (p2->in-p2->lost) - ((p1->in-p1->lost));
51     else if (p1->in != p2->in)
52         return p2->in - p1->in;
53     else
54         return strcmp(p1->name, p2->name);
55 }
56 
57 int main() {
58     int n;
59     int i, a, b;
60     char stra[NAMENUM], strb[NAMENUM];
61 
62     while (scanf("%d", &n) != EOF) {
63         total = 0;
64         memset(teams, 0, sizeof(teams));
65         for (i=1; i<=n*(n-1); ++i) {
66             getchar();
67             scanf("%s VS %s %d:%d", stra, strb, &a, &b);
68             check(stra, a, b);
69             check(strb, b, a);
70         }
71         qsort(teams, total, sizeof(team_st), comp);
72         for (i=0; i<total; ++i)
73             printf("%s %d\n", teams[i].name, teams[i].score);
74         printf("\n");
75     }
76 
77     return 0;
78 }
bubuko.com,布布扣

【杭电acm】1225 Football Score,布布扣,bubuko.com

【杭电acm】1225 Football Score

原文:http://www.cnblogs.com/bombe1013/p/3617570.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!