成绩排序2-机试题

题目描述

用一维数组存储学号和成绩,然后,按成绩排序输出。

输入描述:

输入第一行包括一个整数N(1<=N<=100),代表学生的个数。
接下来的N行每行包括两个整数p和q,分别代表每个学生的学号和成绩。

输出描述:

按照学生的成绩从小到大进行排序,并将排序后的学生信息打印出来。
如果学生的成绩相同,则按照学号的大小进行从小到大排序。
示例1

输入

复制
3
1 90
2 87
3 92

输出

复制
2 87
1 90
3 92

代码:

#include<iostream>
#include<map>

using namespace std;

typedef struct { int studentNo, grade; } student;
int main() {

	int studentNum;

	while (cin >> studentNum) {
		
		student s[101];
		
		for (int i = 1; i <= studentNum; i++) {
			int studentNo, grade;
			cin >> studentNo >> grade;
		
			student st;
			st.studentNo = studentNo;
			st.grade = grade;
			s[i] = st;
		}

		int swapcount = -1;
		while (swapcount != 0) {
			swapcount = 0;
			for (int i = 1, j = 2; j <= studentNum; i++, j++) {
				if (s[i].grade > s[j].grade) {
					s[0] = s[i];
					s[i] = s[j];
					s[j] = s[0];
					swapcount++;
				}
				if (s[i].grade == s[j].grade&&s[i].studentNo > s[j].studentNo) {
					s[0] = s[i];
					s[i] = s[j];
					s[j] = s[0];
					swapcount++;
				}
			}
		}

		for (int i = 0; i < studentNum; i++) {
			cout << s[i + 1].studentNo << " " << s[i + 1].grade << endl;
		}
	}

	return 0;
}

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页