【OJ】日期差值与日期累加

个人主页 : zxctscl
如有转载请先通知

文章目录

  • 1. KY111 日期差值
    • 1.1 题目分析
    • 1.2 代码
  • 2. KY258 日期累加
    • 2.1 题目分析
    • 2.2 代码

1. KY111 日期差值

在这里插入图片描述

1.1 题目分析

日期之间比较可能会出现给的两个年月日都不相同,这个就不好作差,每个月给的天数不同,还有可以是闰年,得先判断一下是不是闰年,这里就写一个判断闰年的函数:

bool is_Leapyear(int year) {
    if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
        return true;
    } else {
        return false;
    }
}

因为每个月的日期不一样,可以写一个获取每个月日期的函数,只是在2月份的时候,闰年就返回29,平年就是28。

int GetMonthDay(int year, int month) {
    int monthDay[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    if (month == 2 && (is_is_Leapyear(year))) {
        return 29;
    }

考虑到输入的时候日期大小的顺序可能是不相同的,那么就统一设置一下,1的输入的日期都比2的大,这里就写一个判断日期大小的函数:
先比较年,年如果相同就比较月,月如果相同就比较日,如果1的都大于2的就是正确,否则就返回false。

bool Max(int y1, int m1, int d1, int y2, int m2, int d2) {
    if (y1 > y2) {
        return true;
    } else if (y1 == y2) {
        if (m1 > m2)
            return true;
        else if (m1 == m2)//月相等比较日期即可
            if (d1 > d2) {
                return true;
            } else {
                return false;
            } else //年相等,月小了
            return false;
    } else {
        return false;
    }
    return false;
}

在写main时候,得注意输入,题目要求的是年月日相连直接输入,在写输入的时候得注意格式scanf("%04d%02d%02d\n%04d%02d%02d", &y1, &m1, &d1, &y2, &m2, &d2) != EOF
再将日期统一为1的都大于2,不同就交换,这里也是提起写了交换函数:

if (!Max(y1, m1, d1, y2, m2, d2)) {
            Swap(y1, y2);
            Swap(m1, m2);
            Swap(d1, d2);
        }

当年月都相同时候,日期直接相减就能得到相差的日期,顾在写判断的时候就写为 while (!((y1 == y2) && (m1 == m2))),把m1月份先减来同m2一样,如果等于0了,m1月份就设置为12,同时年份得减1,把每一次m1–的对应的日期都加起来:

 while (!((y1 == y2) && (m1 == m2))) {
            m1--;
            if (m1 == 0) {
                m1 = 12;
                y1--;
            }
            sum += GetMonthDay(y1, m1);
        }

循环结束时候1的年月与2的年月是一样的,这时候直接让d1 - d2,就是在相同年月下的差值,再加上之前的sum就是相差的日期。但是得注意题目写了日期相差得多一天,所以这里在最后的加上1。
在这里插入图片描述

1.2 代码

#include <iostream>
using namespace std;
bool is_Leapyear(int year) {
    if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
        return true;
    } else {
        return false;
    }
}
int GetMonthDay(int year, int month) {
    int monthDay[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    if (month == 2 && (is_Leapyear(year))) {
        return 29;
    }

    return monthDay[month];
}

void Swap(int& a, int& b) {
    int tmp = a;
    a = b;
    b = tmp;
}
bool Max(int y1, int m1, int d1, int y2, int m2, int d2) {
    if (y1 > y2) {
        return true;
    } else if (y1 == y2) {
        if (m1 > m2)
            return true;
        else if (m1 == m2)//月份相等比较日期大小
            if (d1 > d2) {
                return true;
            } else {
                return false;
            } else //月小
            return false;
    } else {
        return false;
    }
    return false;
}

int main() {
    int y1, m1, d1;
    int y2, m2, d2;
    int sum = 0;
    while (scanf("%04d%02d%02d\n%04d%02d%02d", &y1, &m1, &d1, &y2, &m2, &d2) != EOF) {
        // 注意 while 处理多个 case
        if (!Max(y1, m1, d1, y2, m2, d2)) {
            Swap(y1, y2);
            Swap(m1, m2);
            Swap(d1, d2);
        }
        while (!((y1 == y2) && (m1 == m2))) {
            m1--;
            if (m1 == 0) {
                m1 = 12;
                y1--;
            }
            sum += GetMonthDay(y1, m1);
        }
        int d = d1 - d2;
        sum += d;
        sum += 1;
        cout << sum << endl;

    }
}
// 64 位输出请用 printf("%lld")

2. KY258 日期累加

在这里插入图片描述

2.1 题目分析

与日期有关的计算就必须得区别闰年与平年的2月份,同样先写一个获取每个月对应的日期:
如果是闰年那么就返回29。

int GetMonthDay(int year, int month) {
    int monthDay[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))) {
        return 29;
    }
    return monthDay[month];
}

这里既然已经有给定与已经给的日期相差的天数,那么不如直接将个的d也加上sum = sum + d;,这样的话就好凑整月。如果这个月对应的日期满了,那么就直接让sum减去对应月份的天数,再m++,注意顺序:

sum -= GetMonthDay(y, m);
            m++;

但是这里得注意循环条件sum必须大于所对应的月份才能进入循环:while (sum > GetMonthDay(y, m))
在循环中得考虑,当m>12时候,这是,年份就得加1,而月份就调整为0:

  if (m > 12)
      {
          y++;
          m = 1;
       }

最后出了循环,再把d = sum;就可以了。
注意题目给的要求,输出的日期格式:printf("%04d-%02d-%02d\n", y, m, d)
在这里插入图片描述

2.2 代码

#include <iostream>
using namespace std;
int GetMonthDay(int year, int month) {
    int monthDay[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))) {
        return 29;
    }
    return monthDay[month];
}

int main() {
    int n, y, m, d, sum;
    scanf("%d\n", &n);
    while (n--) { // 注意 while 处理多个 case
        scanf(" %d %d %d %d", &y, &m, &d, &sum);
        sum = sum + d;
        while (sum > GetMonthDay(y, m))
        {
            sum -= GetMonthDay(y, m);
            m++;
            if (m > 12)
            {
                y++;
                m = 1;
            }
        }
        d = sum;

        printf("%04d-%02d-%02d\n", y, m, d);
    }
}
// 64 位输出请用 printf("%lld")

有问题请指出,大家一起进步!!!

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

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

相关文章

【论文精读】大语言模型融合知识图谱的问答系统研究

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

飞书云文档API操作详细介绍

1.场景分析 公司内部很多文档都是由多人进行维护的&#xff0c;随时发生变更&#xff0c;因此在利用这些数据的时候就需要直接读取云文档的数据&#xff0c;从而执行下一步动作。团队云文档api执行权限一般需要管理员审核才能使用。如果你就是管理员&#xff0c;那么恭喜你&am…

进程的奥德赛:并发世界中的核心概念与动态管理

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua&#xff0c;在这里我会分享我的知识和经验。&#x…

【轮式平衡机器人】——TMS320F28069片内外设之ePWM

声明&#xff1a;本系列博客参考有关专业书籍&#xff0c;截图均为自己实操&#xff0c;仅供交流学习&#xff01; 引入 脉冲宽度调制&#xff08;PWM&#xff09;是一种对模拟信号进行数字编码的方法&#xff0c;硬件原理是根据相应载荷的变化来调制晶体管栅极或基极的偏置&…

代码随想录算法训练营第11天

20. 有效的括号 方法&#xff1a; 1. 如果 !st.empty() return false2.如果st.top() ! s[i] return false3. 如果 st.empty() return false注意&#xff1a; 以下这种写法 不满足 题目要求的第二点&#xff0c;不能以正确的顺序闭合 if(s[i] st.top()){return true;s…

世界级通讯社发稿-法新社海外发稿渠道-大舍传媒

世界级通讯社发稿-法新社海外发稿渠道-大舍传媒 美联社&#xff1a;全球最大的通讯社之一 美联社&#xff08;Associated Press&#xff09;是全球最大的通讯社之一&#xff0c;成立于1846年&#xff0c;总部位于美国纽约。该社拥有一支庞大的全球新闻团队&#xff0c;涵盖了…

x86使用PID模式检测磁盘是否存在--代码实现

磁盘 视频教程以及实际代码可以看这一个教程 ATA PIO Mode - OSDev Wiki 下面的大部分来自这一个网址的翻译 在磁盘的第一个扇区里面可以有4个描述分区的描述符 电脑有两个总线, Primary Bus, Secondary Bus, 这两个都有一个Msater Driver和一个Slave Driver According to t…

Ceph qos 限速

因为1 Mbps 1,000,000 bps rbd_qos_bps_limit、rbd_qos_read_bps_limit和rbd_qos_write_bps_limit都是与RBD&#xff08;Rados Block Device&#xff09;的QoS&#xff08;Quality of Service&#xff0c;服务质量&#xff09;相关的参数&#xff0c;用于限制I/O操作的速率。这…

【EI会议征稿通知】第四届人工智能,大数据与算法国际学术会议 (CAIBDA 2024)

第四届人工智能&#xff0c;大数据与算法国际学术会议 (CAIBDA 2024) 2024 4th International Conference on Artificial Intelligence, Big Data and Algorithms 由河南省科学院、河南大学主办&#xff0c;河南省科学院智慧创制研究所、河南大学学术发展部、河南大学人工智能…

【MATLAB源码-第157期】基于matlab的海马优化算法(SHO)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 海马优化器&#xff08;Sea Horse Optimizer, SHO&#xff09;是一种近年来提出的新型启发式算法&#xff0c;其设计灵感来源于海洋中海马的行为模式&#xff0c;特别是它们在寻找食物和伴侣时表现出的独特策略。海马因其独特…

【vue】ant-design弹出框无法关闭和runtimecore提示isFucntion is not function的问题修复

【vue】ant-design弹出框无法关闭和runtimecore提示isFucntion is not function的问题修复&#xff0c;初步分析是vue发布3.4版本以后引起的兼容性问题。 问题截图&#xff1a; 1.isFucntion is not function&#xff0c;是由于vue升级后众多插件版本不匹配造成的问题 2.弹框…

iOS 自动化测试踩坑(一): 技术方案、环境配置与落地实践

移动端的自动化测试&#xff0c;最常见的是 Android 自动化测试&#xff0c;我个人觉得 Android 的测试优先级会更高&#xff0c;也更开放&#xff0c;更容易测试&#xff1b;而 iOS 相较于 Android 要安全稳定的多&#xff0c;但也是一个必须测试的方向&#xff0c;这个系列文…

计算机能转嵌入式吗?

我是电气工程转的嵌入式单片机方向。 那是2011年的事了&#xff0c;当时贴吧也是一片哀嚎。 有找不到工作的&#xff0c;也有干了7,8年月薪不过万的。 这么年过去了&#xff0c;如果你仔细观察每个行业&#xff0c;都有一群骂娘的&#xff0c;也一群混得风生水起的。 主要和圈子…

IDEA修改git提交者的信息

git提交后&#xff0c;idea会记录下提交人的信息&#xff0c;如果不修改提交人信息的话&#xff0c;会有一个默认值。避免每次提交都要填提交人信息&#xff0c;直接设置成自己想要的默认值&#xff0c;该怎么操作&#xff1f; 提交的时候在这里修改提交人信息 避免每次都去设置…

显示高考天数倒计时——vba实现

以下代码实现高考倒计时&#xff1a; Sub 高考倒计时() 高考日期 CDate("06,07," & Year(Date)) If Date > 高考日期 Then高考日期 CDate("06-07-" & Year(Date) 1) End If 年月日 Year(Date) & "年" & Month(Date) &am…

【Python】新手入门(5):# -*- coding: UTF-8 -*- 的作用详解

【Python】新手入门&#xff08;5&#xff09;&#xff1a;# -*- coding: UTF-8 -*- 的作用详解 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础…

code: 500 ] This subject is anonymous - it does not have any identifying

项目场景&#xff1a; 相关背景&#xff1a; 使用idea 开发java 项目&#xff0c;前端页面请求 页面中相关的接口时&#xff0c;idea 控制台有报错信息出现&#xff0c;前端请求失败。 问题描述 问题&#xff1a; 使用idea 开发java 项目&#xff0c;前端页面请求 页面中相…

【Linux】磁盘情况、挂载,df -h无法看到的卷

文章目录 解决挂载、解决挂载完重启就消失1、查看linux下的硬盘挂载的空间、使用空间2、查看没有挂载的硬盘是否检测在系统中3、挂载 &#xff08;挂载完&#xff0c;要在/etc/fstab 下面配置挂载信息 要不然重启挂载就消失了&#xff09; 解决挂载、解决挂载完重启就消失 linu…

STP---生成树协议

STP的作用 a)Stp通过阻塞端口来消除环路&#xff0c;并能够实现链路备份目的 b)消除了广播风暴 c)物理链路冗余&#xff0c;网络变成了层次化结构的网络 STP操作 选举一个根桥每个非根交换机选举一个根端口每个网段选举一个指定端口阻塞非根&#xff0c;非指定端口 STP--生成树…

windows11配置电脑IP

windows11配置电脑IP 选择"开始>设置>“网络&Internet >以太网”。在 "属性"下&#xff0c;编辑IP地址&#xff0c;子网掩码&#xff0c;网关以及DNS。