码迷,mamicode.com
首页 > 其他好文 > 详细

1015. 德才论

时间:2018-02-26 13:22:52      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:==   com   size   font   gpo   nbsp   body   qsort   oid   

 题目截图:

技术分享图片

 

思路:

  可以设置 type 变量,先按 type 排序。然后就是按要求自定义 cmp 函数即可。

 

代码:

 1 /*
 2     1015. 德才论
 3 */
 4 
 5 #include <stdio.h>
 6 #include <string.h>
 7 #include <math.h>
 8 #include <stdlib.h>
 9 #include <time.h>
10 
11 #define maxn 100001
12 typedef struct {
13     int id;                // 准考证号 
14     int de, cai;        // 德分,才分 
15     int sum;            // 总分 
16     int type;            // 类别 
17 } student;
18 student s[maxn];
19 int cnt=0;                // 记录有资格的考生数量 
20 
21 // 自定义排序 
22 int cmp(const void* a, const void* b) {
23     student* c = (student*)a;
24     student* d = (student*)b;
25     if(c->type == d->type) {            // 按类别升序 
26         if(c->sum == d->sum) {            // 按总分降序 
27             if(c->de == d->de) {        // 按德分降序 
28                 return c->id-d->id;        // 按准考证号升序 
29             } else {
30                 return d->de-c->de;
31             }    
32         } else {
33             return d->sum-c->sum;
34         }
35     } else {
36         return c->type-d->type;
37     }
38 }
39 
40 int main() {
41     int N, L, H, i;
42     int a, b, c, d;                // 准考证号,德分,才分,类别 
43     scanf("%d %d %d", &N, &L, &H);
44     for(i=0; i<N; ++i) {
45         scanf("%d %d %d", &a, &b, &c);
46         if(b>=L && c>=L) {
47             s[cnt].id = a;
48             s[cnt].de = b;
49             s[cnt].cai = c;
50             s[cnt].sum = b+c;
51             if(b>=H && c>=H) {            // 类别1 
52                 d = 1;
53             } else if(c<H && b>=H) {    // 类别2
54                 d = 2;
55             } else if(c<H && b<=H && b>=c) {    // 类别3
56                 d = 3;
57             } else {                    // 类别4
58                 d = 4;
59             }
60             s[cnt++].type = d;
61         }
62     }
63     qsort(s, cnt, sizeof(student), cmp);    // 排序
64     // 按格式输出 
65     printf("%d\n", cnt);
66     for(i=0; i<cnt; ++i) {
67         printf("%d %d %d", s[i].id, s[i].de, s[i].cai);
68         if(i != cnt-1) {
69             printf("\n");
70         }
71     }
72 
73     return 0;
74 }

 

1015. 德才论

标签:==   com   size   font   gpo   nbsp   body   qsort   oid   

原文地址:https://www.cnblogs.com/coderJiebao/p/PAT1015.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!