题目1196:成绩排序
时间限制:1 秒
内存限制:32 兆
特殊判题:否
-
题目描述:
-
用一维数组存储学号和成绩,然后,按成绩排序输出。
-
输入:
-
输入第一行包括一个整数N(1<=N<=100),代表学生的个数。
接下来的N行每行包括两个整数p和q,分别代表每个学生的学号和成绩。
-
输出:
-
按照学生的成绩从小到大进行排序,并将排序后的学生信息打印出来。
如果学生的成绩相同,则按照学号的大小进行从小到大排序。
-
样例输入:
-
3 1 90 2 87 3 92
-
样例输出:
-
2 87 1 90 3 92
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Student{
int ID;
int grade;
}Student;//定义表示学生个体的结构体
//排序函数
int cmp(const void *a, const void *b){
struct Student* c = (Student*)a;
struct Student* d = (Student*)b;
if(c->grade != d->grade){
return c->grade - d->grade;//按照学生成绩从小到大排序
}
else{
return c->ID - d->ID;//如果成绩相同,按照学号的大小从小到大排序
}
}
int main()
{
int i,n;
Student student[101];
while(scanf("%d",&n) != EOF)//输入n
{
//输入学生信息
for(i = 0;i < n;i++){
scanf("%d %d",&student[i].ID,&student[i].grade);
}
//排序
qsort(student,n,sizeof(student[0]),cmp);
//输出
for(i = 0;i < n;i++){
printf("%d %d\n",student[i].ID,student[i].grade);
}
}
return 0;
}
/**************************************************************
Problem: 1196
User: zpy
Language: C
Result: Accepted
Time:40 ms
Memory:912 kb
****************************************************************/