Problem 1121 - 排序

/*

Time Limit: 1000MS   Memory Limit: 65536KB   Difficulty:
Total Submit:
279  Accepted: 109  Special Judge: No DescriptionMSTC里有好多有特长的人,
有些是力量型人才,有些是智力型人才,有些是敏捷型的。

现在告诉你 N 个人, 每个人的力量,智力,敏捷的值,
和每个人的编号。

题目要求你将 N 个部员 按照力量 从大到小 排序, 如果两个部员的力量相同, 则按照 智力 值从大到小排序,
如果

两个部员力量, 智力 都一样,则按照 敏捷从 小 到 大排序。 测试数据保证没有两个部员的 力量, 智力, 敏捷
全部相同。


Input第一行 N :表示有 N 个同学。 (  1 <= N <= 500 )
接下来 N 行,

第 i 行有 3 个值, ai, bi, ci   a 代表 力量, b 代表智力, c 代表敏捷。 编号为 i
( i 是部员的编号, 1
<= i <= N )

Output输出 N 行:

将排序后的部员编号输出。
每行一个编号
Sample
Input

4
2 2 3
2 3 4
4 8 9
2 2 2

Sample
Output
3
2
4

*/

结构体排序,没什么说的,就是多关键字,一遍AC。c语言中用<stdlib.h>的qsort函数就行,注意comp比较函数的写法有个模板,可以按照我的这个写,不要盲目的改,像我这种小白,就老实的按照这个弄吧。。。

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 typedef struct node
 4 {
 5     int num;
 6     int power;
 7     int wise;
 8     int quick;
 9 }people;
10 people f[510];
11 int comp(const void *_a,const void *_b)
12 {
13     people *a=(people *)_a;
14     people *b=(people *)_b;
15     if(a->power!=b->power) return a->power<b->power;
16     else if(a->wise!=b->wise) return a->wise<b->wise;
17     else if(a->quick!=b->quick) return a->quick>b->quick;
18 }
19 int main()
20 {
21     int N,i;
22     while(scanf("%d",&N)!=EOF)
23     {
24         for(i=0;i<N;i++)
25         {
26             f[i].num=i+1;
27             scanf("%d %d %d",&f[i].power,&f[i].wise,&f[i].quick);
28         }
29         qsort(f,N,sizeof(people),comp);
30         for(i=0;i<N;i++)
31             printf("%d\n",f[i].num);
32     }
33     return 0;
34 }

 

posted @ 2013-08-10 22:08  hjf007  阅读(162)  评论(0编辑  收藏  举报