首页 > 其他分享 >考研数据结构——每日一题 [日期]

考研数据结构——每日一题 [日期]

时间:2023-07-29 10:31:48浏览次数:32  
标签:return get int 31 days -- 日期 数据结构 考研

3573. 日期累加

设计一个程序能计算一个日期加上若干天后是什么日期。

输入格式 第一行包含整数 T,表示共有 T 组测试数据。

每组数据占一行,包含四个整数 y,m,d,a,分别表示给定日期的年、月、日和累加的天数。

输出格式 每组数据输出一行,一个结果,每行按 yyyy-mm-dd 的格式输出。

数据范围 1≤T≤1000 1000≤y≤3000, 1≤m≤12, 1≤d≤31, 1≤a≤10^6^, 保证输入日期合法。

输入样例: 1 2008 2 3 100 输出样例: 2008-05-13

get_days() 特判二月份:若 闰年 d += month[2] + is_leap(y);

//s-- //1号也算1天 
//背is_leap(y)  平年: return 0 , 闰年 :return 1	
//get_days()  特判二月份:若 闰年 d +=  month[2] + is_leap(y);
#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

//平年每月的天数
const int months[] = {
  0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};

//判断是否是闰年
bool is_leap(int y)
{
    if(y % 400 == 0 || (y % 100 && y % 4 == 0)) return true;
    return false;
}

//获得y年第m月的天数
int get_days(int y, int m)
{
    if(m == 2) return months[m] + is_leap(y);
    return months[m];
}

//获得y年第m月--y + 1年第m月的的天数
int get_year_days(int y, int m)
{
    if(m <= 2) return (365 + is_leap(y));
    return (365 + is_leap(y + 1));
}

int main()
{
    int T;
    cin >> T;
    while (T -- )
    {
        int y, m, d, a;
        cin >> y >> m >> d >> a;
        if (m == 2 && d == 29) a --, m = 3, d = 1;
        while (a > get_year_days(y, m))
        {
            a -= get_year_days(y, m);
            y ++ ;
        }
        while (a -- )
        {
            if ( ++ d > get_days(y, m))
            {
                d = 1;
                if ( ++ m > 12)
                {
                    m = 1;
                    y ++ ;
                }
            }
        }
        printf("%04d-%02d-%02d\n", y, m, d);
    }

    return 0;
}

标签:return,get,int,31,days,--,日期,数据结构,考研
From: https://blog.51cto.com/u_15623277/6890890

相关文章

  • 【数据结构】B树和B+树
    这部分内容较少,B树要理解基本特性,掌握其建立、插入和删除操作;B+树只需要掌握基本概念即可1.B树及其基本操作b树是在平衡二叉树的基础上的衍生概念(1)B树的定义:m阶B树即为所有结点的平衡因子均等于0的m路平衡查找树复习:m叉树指的是结点的最大子树数目,而不是说m叉树的每个非叶结点......
  • 5 线性数据结构 参考代码
    P3156[深基15.例1]询问学号#include<cstdio>constintMAXN=2000005;inta[MAXN];intmain(){intn,m;scanf("%d%d",&n,&m);for(inti=0;i<n;++i)scanf("%d",&a[i]);while(m--){int......
  • 数据结构之带头节点的单链表增删改查操作实现
     单链表的定义什么是单链表   单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。   单链表的各个数据元素在物理上可以是离散存放的,每个结点除了存放数据元素外,还要存储指向下一个节点的指针。而顺序表是连续存放的,每个结点中只......
  • openGauss学习笔记-23 openGauss 简单数据管理-时间/日期函数和操作符
    openGauss学习笔记-23openGauss简单数据管理-时间/日期函数和操作符23.1时间日期操作符用户在使用时间和日期操作符时,对应的操作数请使用明确的类型前缀修饰,以确保数据库在解析操作数的时候能够与用户预期一致,不会产生用户非预期的结果。比如下面示例没有明确数据类型就会出......
  • Java 比较两个日期的方法
    三种方法分别是:1)byUsingclassicCompareTomethodofDateclass.2)byusingequals(),before()andaftermethodofDateclass.3)byusingequals(),before()andaftermethodofCalendarclassinJava.标签:<无>代码片段(2)......
  • element-ui 日期选择器报错 Prop being mutated: "placement"
    报错信息解决方法,添加placement="bottom-start"<el-date-pickerv-model="queryParams.startTime"type="date"placeholder="开始时间"value-format="yyyy-MM-ddHH:mm:ss"placement="bottom-start">......
  • 日期时间操作-moment.js
    文档地址:http://momentjs.cn/引用:在package.json的dependencies中添加"moment-mini": "^2.24.0"引入:import moment from 'moment-mini'常用到的方法:moment().toDate() 同 new Date()moment#valueOf 简单地输出自 Unix 纪元以来的毫秒数,就像 Date#valueOf 一样。当前时......
  • 数据结构中队列的存储和应用
    队列:只有两个口进出数据,一个专门进入数据,另一个专门出数据,先进先出,FIFO表 一、顺序队列:存储元素的连续内存的首地址容量队头位置(出队)队尾位置(入队)[元素数量]运算:创建、销毁、清空、出队、入队、队空、队满、队头、队尾、元素数量#inclu......
  • Java 日期类 获取指定周的周一和周日
    Java日期类获取指定周的周一和周日1.整体流程下面是实现获取指定周的周一和周日的整体流程:步骤描述步骤1获取指定日期所在周的星期一的日期步骤2获取指定日期所在周的星期日的日期步骤3打印输出获取到的周一和周日的日期2.实现步骤接下来,我们将逐......
  • Java 日期格式化星期
    Java日期格式化星期Java是一种广泛应用的编程语言,也是开发人员常用的工具之一。在Java中,日期和时间的处理是一个常见的任务。日期格式化是将日期和时间转换为特定格式的过程。在本文中,我们将探讨如何使用Java进行日期格式化,并重点介绍如何格式化星期。为什么要格式化星期?在很......