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

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

相关文章

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。 |(位

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变

第二十四章 rust中的运算符重载

注意 本系列文章已升级、转移至我的自建站点中,本章原文为:rust中的运算符重载 目录 注意一、前言二、基本使用三、常用运算符四、通用约束 一、前言 C/C++中有运算符重载这一概念,它的目的是让即使含不相干的内容也能通过我们自定义的方法进行运算符操作运算。 比如字符串本身是不能相加的,但由于C++中的String重载了运算符+,所以我们就可以将两个字符串进行相加、但实际