时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:4339
解决:1476
-
题目描述:
-
用一维数组存储学号和成绩,然后,按成绩排序输出。
-
输入:
-
输入第一行包括一个整数N(1<=N<=100),代表学生的个数。
接下来的N行每行包括两个整数p和q,分别代表每个学生的学号和成绩。
-
输出:
-
按照学生的成绩从小到大进行排序,并将排序后的学生信息打印出来。
如果学生的成绩相同,则按照学号的大小进行从小到大排序。
-
样例输入:
-
3 1 90 2 87 3 92
-
样例输出:
-
2 87 1 90 3 92
思路:
发现排序题真的好多,大概是作为最基本的算法了吧。
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 100
struct node {
int num;
int score;
};
void print(struct node *p)
{
printf("%d %d\n", p->num, p->score);
}
int cmp(const void *a, const void *b)
{
struct node *c = (struct node *)a;
struct node *d = (struct node *)b;
if (c->score != d->score)
return c->score - d->score;
else
return c->num - d->num;
}
int main(void)
{
int n, i;
struct node a[N];
while (scanf("%d", &n) != EOF)
{
for (i=0; i<n; i++)
scanf("%d%d", &(a[i].num), &(a[i].score));
qsort(a, n, sizeof(a[0]), cmp);
for (i=0; i<n; i++)
{
print(&a[i]);
}
}
return 0;
}
/**************************************************************
Problem: 1196
User: liangrx06
Language: C
Result: Accepted
Time:40 ms
Memory:912 kb
****************************************************************/