【PAT乙级】【C++】1004 成绩排名 (20 分)

题目描述:

读入 n ( > 0 ) n(>0) n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。

输入格式:

每个测试输入包含 1 个测试用例,格式为

第 1 行:正整数 n
第 2 行:第 1 个学生的姓名 学号 成绩
第 3 行:第 2 个学生的姓名 学号 成绩
… …
… …
第 n+1 行:第 n 个学生的姓名 学号 成绩

其中姓名和学号均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。

输出格式:

对每个测试用例输出 2 行,第 1 行是成绩最高学生的姓名和学号,第 2 行是成绩最低学生的姓名和学号,字符串间有 1 空格。

输入样例:

3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95

输出样例:

Mike CS991301
Joe Math990112

代码:

/*利用头文件algorithm.h中的排序函数sort进行排序,
最后输出排序后学生数组【0】和【n-1】的信息*/
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
const int MAXN = 1000;	//定义最大值

struct stu {	//定义学生结构体
    string name;	//名字和ID
    string id;
    int cj;	//成绩
};
//cmp函数可以让sort函数对结构体中cj数值的排序,接受stu x和y
bool  cmp(stu x,stu y)	
{
	return x.cj<y.cj;	//从小到大排序
}

int main() {
	stu student[MAXN];
	int n;
	cin>>n;
	for(int i =0;i<n;i++)
		cin>>student[i].name>>student[i].id>>student[i].cj;	//输入学生信息
	sort(student,student+n,cmp);	//sort(起始地址,最终地址,cmp(如果是对普通数组的从小到大排序,那么cmp可以没有;但如果想要对结构体的某一元素排序或者从大到小排序,需要用户自己写一个cmp函数,注意cmp为bool类型的函数))
	cout<<student[n-1].name<<' '<<student[n-1].id<<endl;	//最大
	cout<<student[0].name<<' '<<student[0].id;	//最小
}

上一篇:Java错误 Cannot cast from boolean to int或cannot convert from int to boolean


下一篇:C++自定义排序算法