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

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

相关文章

Java 方法重载Overload常见误区及注意事项

《Java方法重载Overload常见误区及注意事项》Java方法重载允许同一类中同名方法通过参数类型、数量、顺序差异实现功能扩展,提升代码灵活性,核心条件为参数列表不同,不涉及返回类型、访问修饰符... 目录Java 方法重载(Overload)详解一、方法重载的核心条件二、构成方法重载的具体情况三、不构

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Java计算经纬度距离的示例代码

《Java计算经纬度距离的示例代码》在Java中计算两个经纬度之间的距离,可以使用多种方法(代码示例均返回米为单位),文中整理了常用的5种方法,感兴趣的小伙伴可以了解一下... 目录1. Haversine公式(中等精度,推荐通用场景)2. 球面余弦定理(简单但精度较低)3. Vincenty公式(高精度,

Kotlin运算符重载函数及作用场景

《Kotlin运算符重载函数及作用场景》在Kotlin里,运算符重载函数允许为自定义类型重新定义现有的运算符(如+-…)行为,从而让自定义类型能像内置类型那样使用运算符,本文给大家介绍Kotlin运算... 目录基本语法作用场景类对象数据类型接口注意事项在 Kotlin 里,运算符重载函数允许为自定义类型重

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

Java逻辑运算符之&&、|| 与&、 |的区别及应用

《Java逻辑运算符之&&、||与&、|的区别及应用》:本文主要介绍Java逻辑运算符之&&、||与&、|的区别及应用的相关资料,分别是&&、||与&、|,并探讨了它们在不同应用场景中... 目录前言一、基本概念与运算符介绍二、短路与与非短路与:&& 与 & 的区别1. &&:短路与(AND)2. &:非短

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

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

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