愿你坚持不懈,努力进步,进阶成自己理想的人

—— 2017.09, 写给3年后的自己

PAT4:寻找最高成绩

定义一个学生类Student,数据成员包括学号、姓名和成绩;成员函数有:构造函数,设置数据成员的值,读取数据成员的值。在主函数中定义包含n个对象的数组,再编写一个Student类的友元函数,查找成绩最高的那一项记录。

输入格式: 测试输入包含若干测试用例,每个测试用例占一行。当读入n=0时输入结束,相应的结果不要输出。

输入输出示例:括号内为说明

5 (n=5,后面是5个学生的信息,1<=n<=100)
000101 Bob 56 (学号 [0,999999])
000102 Alice 73
000103 Anna 85
000104 Sam 34
000105 Mike 90
4 (n=4,后面是4个学生的信息)
000101 Bob 20
000102 Alice 0    
000104 Sam 97
000109 Anna 85
0
输出样例:
000105 Mike 90
000104 Sam 97
Sample Input:
3
000103 Tonny 85
000107 Eric 5
000109 Sam 34
4
000111 Tom 3
000112 Jerry 4
000113 Jack 5
000117 Hale 6

#include <iostream>
#include <iomanip>
using namespace std;

class Student {
public:
    Student(){}
    Student(int n, string nam, int s):num(n),name(nam),score(s){}
    void init() {
        this->num = 0;
        this->name = "";
        this->score = 0;
    }
    void set() {
        cin >> this->num >> this->name >> this->score;
    }
    void show() {
        cout << setw(6) << setfill('0') << this->num;
        cout << " ";
        cout << this->name;
        cout << " ";
        cout << this->score << endl;
    }
    friend void max(Student &, int, int);
private:
    int num;
    string name;
    int score;
};

void max(Student & s, int i, int n) {
    static Student max(0,"",0);
    if(s.score > max.score) {
        max = s;
    }
    if(i==n-1) {
        max.show();
        max.init();
    }
}

int main() {
    int i,n;
    cin >> n;
    while (n!=0) {
        Student * stu = new Student[n];
        for(i=0; i<n; i++) {
            stu[i].set();
            max(stu[i], i, n);
        }
        delete [] stu;
        cin >> n;
    }
    
    return 0;
}