Problem C: 学生的排序
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 274 Solved: 136
[Submit][Status][Web Board]
Description
输入若干个学生的姓名和年龄,将他们排序后输出,并求输入的若干个学生的最大者。
定义一个类Student,拥有属性age(int类型)和name(字符串),重载其大于、输出和输入运算符。大于运算符比较的规则是先比较年龄,年龄大的对象为大;如果年龄相同,则比较姓名,姓名大的对象为大。
基于Student类定义类StudentGroup,该类有若干个学生组成,定义其add方法、srt方法和show方法,用于增加1个学生、对所有的学生排序和显示所有的学生信息。
Input
输入有若干行,每行包括一个字符串(无空白符)、一个整数,分别学生的姓名name和年龄age。
Output
先按照学生比较规则按照递增序输出所有学生信息,每个学生信息占一行。最后一行输出最大学生的信息,格式见样例。
Sample Input
Tom 19
Jack 21
Mary 20
Tom 22
Jack 13
Jack 21
Mary 20
Tom 22
Jack 13
Sample Output
Jack 13
Tom 19
Mary 20
Jack 21
Tom 22
The max is Tom 22
Tom 19
Mary 20
Jack 21
Tom 22
The max is Tom 22
HINT
Append Code
#include <iostream> #include <vector> #include <cmath> #include <algorithm> using namespace std; class Student { public: int age; string name; Student(string s="",int a=0):age(a),name(s){} friend istream & operator>>(istream &in, Student &A){ in >> A.name >> A.age; return in; } friend ostream & operator<<(ostream &os, Student &p) { os<<p.name<<" "<<p.age<<endl; return os; } bool operator <(const Student &p) { if(age==p.age) return name<p.name; else return age<p.age; } }; class StudentGroup:public Student { public: vector<Student> s; void add(Student &p) { s.push_back(p); } bool cmp(Student a,Student b) { return a<b; } void srt() { int l=s.size(); for(int i=0;i<l;i++) for(int j=i;j<l;j++) { if(!(s[i]<s[j])) { int t; string r; t=s[i].age; s[i].age=s[j].age; s[j].age=t; r=s[i].name; s[i].name=s[j].name; s[j].name=r; } } } Student operator =(const Student &p) { return Student(p.name,p.age); } void show() { for(int i=0;i<s.size();i++) cout<<s[i].name<<" "<<s[i].age<<endl; } }; int main() { Student stu, max; StudentGroup stuG; while(cin>>stu) { if (!(stu < max)) max = stu; stuG.add(stu); } stuG.srt(); stuG.show(); cout<<"The max is "<<max<<endl; return 0; }