题目描述
用一维数组存储学号和成绩,然后,按成绩排序输出。
输入描述
输入第一行包括一个整数N(1<=N<=100),代表学生的个数。
接下来的N行每行包括两个整数p和q,分别代表每个学生的学号和成绩。
输出描述
按照学生的成绩从小到大进行排序,并将排序后的学生信息打印出来。
如果学生的成绩相同,则按照学号的大小进行从小到大排序。
分析
水题,直接用sort排序即可,唯一需要注意的是compare函数的编写,因为题目要求成绩相同时,按照学号大小输出。有关compare和sort函数的相关问题,在之前成绩排序这篇博客中有详细介绍,这里就不再说明。如果读者不太明白,可以参考博主之前的文章。
AC代码如下:
#include<iostream>
#include<algorithm>
using namespace std;
typedef struct student
{
int num;
int grade;
}student;
bool compare(const student& a, const student& b)
{
if(a.grade != b.grade)
{
return a.grade < b.grade;
}
else
{
return a.num < b.num;
}
}
int main(void)
{
int n;
while(cin >> n)
{
student* stu = new student[n];
for(int i = 0; i < n; ++i)
{
cin >> stu[i].num >> stu[i].grade;
}
sort(stu, stu+n, compare);
for(int i = 0; i < n; ++i)
{
cout << stu[i].num << " " << stu[i].grade << endl;
}
delete [] stu;
}
return 0;
}