Student birthday difference calculation (operator overloading)

【id:303】【20分】C. 学生生日差值计算(运算符重载)
时间限制
1s
内存限制
128MB
题目描述

定义一个学生类Student,包含该学生的姓名、出生年、月、日 ,重定义 “-”号实现两个学生之间相差多少天的比较。并利用重载的“-”运算符,求所有学生中年龄相差最大的两个人的名字以及相差天数。


输入

第一行:输入所需要输入的学生个数;

第二行开始,依次输入每个学生的姓名、出生年、月、日。


输出

输出年龄相差最大的两个人的名字以及相差天数。


样例查看模式 
正常显示
查看格式
输入样例1 <-复制
3
Tom 1995 1 1
Joe 1995 2 28
Jimmy 1996 1 8
输出样例1
Tom和Jimmy年龄相差最大,为372天。

Format of initialization class array

Student students[times];

Format in Student class

friend int operator-(Student &one, Student &two)

The method called in the friend function needs to be static

#include "iostream"

using namespace std;


class Student {
public:
    string name;
    int yyyy;
    int mm;
    int dd;

    Student() {}

    Student(const string &name, int yyyy, int mm, int dd) : name(name), yyyy(yyyy), mm(mm), dd(dd) {}

    static int getDays(inzt y, int m, int d) {
        int twoDays = 28;
        if ((y % 400 == 0) || (y % 4 == 0 && y % 100 != 0)) {
            twoDays = 29;
        }
        int resDays = d;
        switch (m - 1) {
            case 11:
                resDays += 30;
            case 10:
                resDays += 31;
            case 9:
                resDays += 30;
            case 8:
                resDays += 31;
            case 7:
                resDays += 31;
            case 6:
                resDays += 30;
            case 5:
                resDays += 31;
            case 4:
                resDays += 30;
            case 3:
                resDays += 31;
            case 2:
                resDays += twoDays;
            case 1:
                resDays += 31;
        }
        return resDays;
    }

    friend int operator-(Student &one, Student &two) {
        if (one.yyyy == two.yyyy) {
            int o = getDays(one.yyyy, one.mm, one.dd);
            int t = getDays(two.yyyy, two.mm, two.dd);
            return abs(o - t);
        } else if (one.yyyy < two.yyyy) {
            int o = getDays(one.yyyy, 12, 31) - getDays(one.yyyy, one.mm, one.dd);
            int t = getDays(two.yyyy, two.mm, two.dd);
            int resDays = o + t;
            for (int i = one.yyyy + 1; i < two.yyyy; ++i) {
                resDays += getDays(i, 12, 31);
            }
            return resDays;

        } else if (one.yyyy > two.yyyy) {
            int o = getDays(one.yyyy, one.mm, one.dd);
            int t = getDays(two.yyyy, 12, 31) - getDays(two.yyyy, two.mm, two.dd);
            int resDays = o + t;
            for (int i = two.yyyy + 1; i < one.yyyy; ++i) {
                resDays += getDays(i, 12, 31);
            }
            return resDays;
        }

    }
};

int main() {
    int times;
    cin >> times;
    string name;
    int yyyy;
    int mm;
    int dd;
    Student students[times];
    for (int i = 0; i < times; ++i) {

        cin >> name >> yyyy >> mm >> dd;
        students[i] = *new Student(name, yyyy, mm, dd);
    }
    int resMax = 0;
    int oneIndex = 0;
    int twoIndex = 0;
    for (int i = 0; i < times - 1; ++i) {
        for (int j = i + 1; j < times; ++j) {
            int temp = students[i] - students[j];
            if (temp > resMax) {
                resMax = temp;
                oneIndex = i;
                twoIndex = j;
            }

        }
    }
    cout << students[oneIndex].name << "和" << students[twoIndex].name << "年龄相差最大,为" << resMax << "天。" << endl;
}

Guess you like

Origin blog.csdn.net/m0_62288512/article/details/131580101