算法09 日期相关模拟算法【C++实现】

这是《C++算法宝典》算法篇的第09节文章啦~

如果你之前没有太多C++基础,请点击👉专栏:C++语法入门,如果你C++语法基础已经炉火纯青,则可以进阶算法👉专栏:算法知识和数据结构👉专栏:数据结构啦

目录

❀前言

📕得到某年某月的天数

🧠普通闰年

🧠世纪闰年

📕得到某年某月的天数

📕判断日期的合法性

📕训练:第n天的日期

🧠第n天的日期参考代码

📕训练:日期距离

🧠日期距离参考代码


前言

无论是中小学编程竞赛还是大学生编程竞赛,日期模拟都是经常会出现的题目。

日期模拟经常会出现以下题型:

  • 得到某年某月的天数
  • 判断给定日期的合法性
  • 给定年份,求这一年第n天的日期
  • 给定年月日,求经过n天后的日期
  • 查找两个日期之间有多少个回文日期... ...

得到某年某月的天数

得到某年某月的天数问题经常会作为其他问题的模板来使用。

首先我们需要存储一年中所有月份相对应的天数

int day[] = {0,31,28,31,30,31,30,31,31,30,31,30,31}

其中day[1]表示一月份最多31天,2月份先赋值为28天,具体天数还需要检测年份是否是闰年,如果是闰年还需要+1天

闰年分为两种:

普通闰年

年份是4的倍数,但不是100的倍数,例如2004、2020年等

世纪闰年

是400的倍数,例如1900不是世纪闰年,2000是世纪闰年,即:

if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)

    是闰年;

else

    不是;

得到某年某月的天数

当月份不是2月时,就返回指定当前月份初始天数

当月份是2月时,判断年份是否是闰年,当年份为闰年成立时,leap值为1,不成立时值为0,初始天数加上leap的值即为2月份天数

int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

// 得到某年某月的天数

int check(int y, int m)

{

    if(m != 2) return days[m];

    else

    {

        //特判 2 月

        int leap = (y % 4 == 0 && y % 100 != 0 || y % 400 == 0);

        return days[m] + leap;

    }

}

判断日期的合法性

一般这样的题型会先给你一个格式,看是否符合这个格式,比如要满足20230701这样的格式才是合法的。

首先你需要分离出年份,再分离出月份,最后分离出日。

再分别判断年月日是否符合题意

if(m<1||m>12) 则月份不符合

if(d<1||d>(指定月份的总天数)) 则日不符合

注:年份一般不需要检查,但也要视题意而定

训练:第n天的日期

给定一个年份y和一个整数d,问这一年的第d天是几月几日?注意闰年的2月有29天。满足下面条件之一的是闰年:

1、年份是4的整数倍,而且不是100的整数倍;

2、年份是400的整数倍。

【输入描述】输入的第一行包含一个整数y,表示年份,年份在1900到2015之间(包含1900和2015)。

输入的第二行包含一个整数d,d在1至365之间。

【输出描述】输出两行,每行一个整数,分别表示答案的月份和日期。

【样例输入1】

2015

80

【样例输出】

3

21

第n天的日期参考代码

#include <iostream>
using namespace std;
int day[13]={0,31,0,31,30,31,30,31,31,30,31,30,31};
bool check(int n)  //判断闰年
{
    if(n%400==0||(n%4==0&&n%100!=0)) return true;
    return false;
}
int main()
{

    int m,n;
    cin>>m>>n;
    if(check(m))  day[2]=29;
    else  day[2]=28;
    for(int j=1;j<=12;j++)
    {
        n-=day[j];
        if(n<0){
            cout<<j<<endl<<day[j]+n;
            break;
        }
        if(n==0)
        {
            cout<<j<<endl<<day[j];
            break;
        }
    }
    return 0;
}

训练:日期距离

 输入一个的日期,输出它和2014年5月17日相差有多少天?注意闰年的2月有29天。满足下面条件之一的是闰年:

1、年份是4的整数倍,而且不是100的整数倍;

2、年份是400的整数倍。

【输入描述】输入的第一行包含一个整数y,表示年份,年份在1到2014之间(包含1和2014)。

输入的第二行包含一个整数m,表示月份,m在1至12之间。

输入的第三行包含一个正整数d,表示日期,d在1至31之间。

【输出描述】输出两个日期之间相差的天数。

【输入样例】

1988

7

3

【输出样例】

9449

日期距离参考代码

#include <iostream>
using namespace std;
int day[13]={0,31,0,31,30,31,30,31,31,30,31,30,31};
bool check(int k)  //判断闰年
{
    if(k%400==0||(k%4==0&&k%100!=0))
        return true;
    return false;
}
int sum;//计算总天数
int main()
{
    int m,n,d;
    cin>>m>>n>>d;
    if(check(m))  day[2]=29;
    else  day[2]=28;
    for(int i=m+1;i<2014;i++)  //计算完整的年份天数
    {
        if(check(i))  sum+=366;
        else sum+=365;
    }
    if(m==2014)
    {
        for(int i=n+1;i<5;i++) //计算完整的月份的天数
            sum+=day[i];
        if(n==5) sum+=17-d;
        else sum+=day[n]-d+17;
    }
    else
    {
        sum+=137; //2014.1.1~2014.5.17总天数
        for(int i=n+1;i<=12;i++)   //算上完整月份天数
        sum+=day[i];
        sum+=day[n]-d;   
    }
    cout<<sum<<endl;
    return 0;
}

从入门到算法,再到数据结构,查看全部文章请点击此处​​​​​icon-default.png?t=N7T8http://www.bigbigli.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/759841.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

模型预测控制:线性MPC

模型预测控制&#xff1a;线性MPC 模型预测控制&#xff08;Model Predictive Control, MPC&#xff09;是一种广泛应用于工业过程控制和自动驾驶等领域的先进控制技术。MPC通过在线解决优化问题来计算控制输入&#xff0c;从而实现系统的最优控制。本文将介绍线性MPC的系统模…

架构师篇-8、运用事件风暴进行业务领域建

如何成为优秀架构师&#xff1f; 需要有一定的技术积累&#xff0c;但是核心是懂业务。 具备一定的方法&#xff0c;并且有很强的业务理解能力。 技术架构师&#xff1a;形成技术方案&#xff0c;做的更多的是底层的平台&#xff0c;提供工具。 业务架构师&#xff1a;解决方…

Cyber Weekly #13

赛博新闻 1、谷歌发布最强开源小模型Gemma-2 本周五&#xff08;6月28日&#xff09;凌晨&#xff0c;谷歌发布最强开源小模型Gemma-2&#xff0c;分别为9B&#xff08;90亿&#xff09;和27B&#xff08;270亿&#xff09;参数规模&#xff0c;其中9B 模型在多项基准测试中均…

50-4 内网信息收集 - 本机信息收集

一、内网信息收集 内网信息收集可以从以下几个方面进行:本机信息收集、域内信息收集、内网资源探测等。通过这些步骤,我们可以全面了解当前主机的角色和所处内网的拓扑结构,从而选择更合适、更精准的渗透方案。 二、本机基础信息收集 在本机基础信息收集阶段,可以执行以下…

怎么监控公司文件?高效省力的7个办法,企业都在用

公司文件监控方法主要包括以下几个方面&#xff0c;以确保数据安全和防止文件泄密&#xff1a; 使用专业监控软件&#xff1a;如安企神等专业的企业级监控软件&#xff0c;可以详细记录员工的电脑操作&#xff0c;包括文件访问、修改、删除、复制等行为&#xff0c;以及外设使用…

RTMP推流到SRS流媒体服务器消息处理

RTMP推流到SRS流媒体服务器消息处理 SRS和客户端是怎么交换消息的&#xff1f;各个消息有什么作用&#xff1f;握手成功后&#xff0c;SRS和客户端进行消息交换&#xff0c;对应wiresharek这部分截图&#xff1a; 流程图&#xff08;之前画的&#xff0c;可能不够详细&#xf…

百亿级存储架构: ElasticSearch+HBase 海量存储架构与实现

百亿级存储架构&#xff1a; ElasticSearchHBase 海量存储架构与实现 尼恩&#xff1a;百亿级数据存储架构起源 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;经常性的指导小伙伴们改造简历。 经过尼恩的改造之后&#xff0c;很多小伙伴拿到了一线互联网企业如得物、阿…

AI模型的奥运会:谁将在OlympicArena中夺冠?

获取本文论文原文PDF&#xff0c;请在公众号【AI论文解读】留言&#xff1a;论文解读 引言&#xff1a;AI模型的奥林匹克级评测 评估和比较不同AI模型的性能始终是一个核心话题。随着技术的不断进步&#xff0c;这些模型在处理复杂任务的能力上有了显著的提升。为了更精确地衡…

springboot汽车租赁管理系统-计算机毕业设计源码08754

目 录 摘 要 第 1 章 引 言 1.1 选题背景和意义 1.2 国内外研究现状 1.3 论文结构安排 第 2 章 系统的需求分析 2.1 系统可行性分析 2.1.1 技术方面可行性分析 2.1.2 经济方面可行性分析 2.1.3 法律方面可行性分析 2.1.4 操作方面可行性分析 2.2 系统功能需求分析…

有了文章生成器,轻易满足你对文章的需求

写文章对于大多数人来说并不轻松&#xff0c;往往一篇文章写作完成是需要消耗一个人的大量时间与精力的&#xff0c;如果想要写的文章特别好&#xff0c;那么还要再花一点时间去进入后期的修改。就没有什么方法让大家轻易的去完成文章写作吗&#xff1f;答案是有的&#xff0c;…

【TB作品】密码锁,ATMEGA128单片机,Proteus仿真

题目 5 &#xff1a;密码锁 使用单片机实现简易密码锁&#xff0c;通过输入密码&#xff0c;实现门锁的开启&#xff08;控制继电器&#xff09;。 具体要求如下&#xff1a; &#xff08;1&#xff09;当输入正确密码后&#xff0c;继电器开启。 &#xff08;2&#xff09;当三…

一元线性回归-R语言

# # 安装包 # install.packages(ggplot2) # library(ggplot2) Sys.setlocale(category LC_ALL, locale English_United States.1252) # Sys.setlocale("LC_ALL","Chinese") x <- c(18, 20, 22, 24, 26, 28, 30) y <- c(26.86, 28.35, 28.87,28.75,…

python格式文件

python小白考后复习 CSV格式文件ini格式文件我们可以读取所有节点还可以输出一个节点下所有键值对组成的元组获取节点下的键对应的值判断节点是否存在添加节点还可以添加键值还可以删除节点 XML格式文件读取若是文件格式存在的xml若是以字符串形式存在的xml获取子标签还有获取子…

Arduino IDE 的安装与esp32项目的创建

1打开官网下载 官网 1-1下载完成后安装即可&#xff0c;会弹出一些按安装提示点击安装 2切换为中文模式 2-1点击Flie&#xff0c;在点击图中高亮的位置&#xff0c;进入 2-2选择语言 3创建esp32项目 3-1在线安装&#xff08;不一定成功&#xff0c;可以一直试&#xff09; …

各维度卷积神经网络内容收录

各维度卷积神经网络内容收录 卷积神经网络&#xff08;CNN&#xff09;&#xff0c;通常是指用于图像分类的2D CNN。但是&#xff0c;现实世界中还使用了其他两种类型的卷积神经网络&#xff0c;即1D CNN和3D CNN。 在1D CNN中&#xff0c;内核沿1个方向移动。1D CNN的输入和…

100张linux C/C++工程师面试高质量图

文章目录 杂项BIOSlinux开机启动流程内核启动流程网络编程网络编程流程tcp状态机三次握手四次断开reactor模型proactor模型select原理poll原理epoll原理文件系统虚拟文件系统文件系统调用阻塞IO非阻塞IO异步IO同步阻塞同步非阻塞IO多路复用进程管理进程状态程序加载内存管理MMU…

ArtTS系统能力-通知的学习(3.1)

上篇回顾&#xff1a; ArtTS语言基础类库-容器类库内容的学习(2.10.2&#xff09; 本篇内容&#xff1a; ArtTS系统能力-通知的学习&#xff08;3.1&#xff09; 一、 知识储备 1. 基础类型通知 按内容分成四类&#xff1a; 类型描述NOTIFICATION_CONTENT_BASIC_TEXT普通文…

基于STM32的智能农业环境监控系统

目录 引言环境准备智能农业环境监控系统基础代码实现&#xff1a;实现智能农业环境监控系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统实现4.4 用户界面与数据可视化应用场景&#xff1a;农业环境管理与优化问题解决方案与优化收尾与总结 1. 引言 智能农业环境监控系…

Linux rpm与yum

一、rpm包管理 rpm用于互联网下载包的打包及安装工具&#xff0c;它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager (RedHat软件包管理工具&#xff09;的缩写&#xff0c;类似windows的setup.exe&#xff0c;这一文件格式名称虽然打上了R…

技术打包 催化剂浸渍制作方法设备

网盘 https://pan.baidu.com/s/1Bybbyy5qEA2uTUlaELmWwg?pwdepdk 改性加氢处理催化剂载体、催化剂及其制备方法和应用.pdf 水滑石基催化剂在高浓度糖转化到1,2-丙二醇中的应用.pdf 海泡石负载铁锰双金属催化剂及其制备方法和应用.pdf 甘油氢解催化剂及其制备方法和应用.pdf 用…