【算法】KY2 成绩排序
输入描述:
注意一个case里面有多组样例,请用循环处理输入 输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开。
输出描述:
按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开
示例1
输入:
3
0
fang 90
yang 50
ning 70
输出:
fang 90
ning 70
yang 50
示例2
输入:
3
1
fang 90
yang 50
ning 70
3
0
moolgouua 43
aebjag 87
b 67
输出:
yang 50
ning 70
fang 90
aebjag 87
b 67
moolgouua 43
说明:
第一组用例:
3
1
fang 90
yang 50
ning 70
升序排序为:
yang 50
ning 70
fang 90
第二组降序为:
aebjag 87
b 67
moolgouua 43
#include<stdio.h>
#include<algorithm>
using namespace std;
struct Student {
char name[50];
int grade;
int seq; // 录入顺序
};
// 降序
bool comp0(Student l, Student r) {
if (l.grade > r.grade) {
return true;
// 成绩相同,按照先输入的排在前面
} else if (l.grade == r.grade && l.seq < r.seq) {
return true;
} else {
return false;
}
}
// 升序
bool comp1(Student l, Student r) {
if (l.grade < r.grade) {
return true;
// 成绩相同,按照先输入的排在前面
} else if (l.grade == r.grade && l.seq < r.seq) {
return true;
} else {
return false;
}
}
int main() {
int n, order;
Student stu[1000];
while(scanf("%d %d", &n, &order) != -1) {
int seq = 1; // 起始为1
for (int i=0; i<n; i++) {
scanf("%s %d",&stu[i].name, &stu[i].grade);
stu[i].seq = seq++;
}
if (order == 0) {
sort(stu, stu+n, comp0);
} else {
sort(stu, stu+n, comp1);
}
// 输出
for (int i=0; i<n; i++) {
printf("%s %d\n",stu[i].name, stu[i].grade);
}
}
return 0;
}