【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;
}