【算法】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;
}
posted @ 2024-03-12 17:21  Lnnau  阅读(22)  评论(0)    收藏  举报  来源