学生生日差值计算(运算符重载)

2024-05-23 21:20

本文主要是介绍学生生日差值计算(运算符重载),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

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

输入

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

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

输出

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

//

输入样例:

3
Tom 1995 1 1
Joe 1995 2 28
Jimmy 1996 1 8

输出样例:

Tom和Jimmy年龄相差最大,为372天。

AC代码:
 

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;class Student
{
public:Student(string name, int year, int month, int day) : name(name), year(year), month(month), day(day) {}// 重载 "-" 运算符,计算两个学生出生日期相差的天数int operator-(const Student &other) const{return abs(daysSinceEpoch() - other.daysSinceEpoch());}const string &getName() const{return name;}private:string name;int year;int month;int day;// 辅助函数,计算自 xx 年 x 月 x 日以来的天数int daysSinceEpoch() const{const int daysPerYear = 365;int days = year * daysPerYear;days += (year - 1) / 4;   // 闰年多加一天days -= (year - 1) / 100; // 但是每100年不是闰年days += (year - 1) / 400; // 但是每400年又是闰年days += daysInMonth(month, year);days += day - 1;return days;}// 辅助函数,计算某年某月的天数int daysInMonth(int month, int year) const{const int daysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int days = 0;for (int i = 0; i < month - 1; i++){days += daysInMonth[i];}// int days = daysInMonth[month - 1];if (month == 2 && isLeapYear(year)){days++;}return days;}// 辅助函数,判断是否是闰年bool isLeapYear(int year) const{return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);}
};int main()
{int n;cin >> n; // 输入学生个数vector<Student> students;for (int i = 0; i < n; ++i){string name;int year, month, day;cin >> name >> year >> month >> day;students.push_back(Student(name, year, month, day));}// 找出年龄相差最大的两个人int maxDifference = 0;pair<string, string> maxDifferenceNames;for (int i = 0; i < students.size(); ++i){for (int j = i + 1; j < students.size(); ++j){int difference = students[i] - students[j];if (difference > maxDifference){maxDifference = difference;maxDifferenceNames = make_pair(students[i].getName(), students[j].getName());}}}// 输出结果cout << maxDifferenceNames.first << "和" << maxDifferenceNames.second << "年龄相差最大,为" << maxDifference << "天。" << endl;return 0;
}

这篇关于学生生日差值计算(运算符重载)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/996452

相关文章

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

XTU 1237 计算几何

题面: Magic Triangle Problem Description: Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU. Huangriq works in a big compa

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

计算数组的斜率,偏移,R2

模拟Excel中的R2的计算。         public bool fnCheckRear_R2(List<double[]> lRear, int iMinRear, int iMaxRear, ref double dR2)         {             bool bResult = true;             int n = 0;             dou

【重学 MySQL】十九、位运算符的使用

【重学 MySQL】十九、位运算符的使用 示例检查权限添加权限移除权限 在 MySQL 中,位运算符允许你直接在整数类型的列或表达式上进行位级操作。这些操作对于处理那些需要在二进制表示上进行直接修改或比较的场景特别有用,比如权限管理、状态标记等。 &(位与) 对两个数的二进制表示进行位与操作。只有两个相应的二进制位都为 1 时,结果的该位才为 1,否则为 0。 |(位