考研算法 2022.3.3

128 阅读1分钟

考研算法

题目

题目链接

题目要求

日期模拟

代码

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        int y,m,d,a;
        cin>>y>>m>>d>>a;
        int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
        a=a+d;
        d=0;
        int i=m;
        for(i;i<13;i++)
        {
            // printf("%d--%d----%d\n",y,m,i);
            if (i==2 )
            {
                int flag=0;
                if (y%400==0 && y%100==0 || y%100!=0 && y%4==0)
                {
                    flag=1;
                    // printf("%d is True\n",y);
                }
                months[2]+=flag;
            }
            if (i==12 && a-months[12]>0)
            {
                y+=1;
                i=0;
                a=a-months[12];
                continue;
            }
            if (a-months[i]<=0)
            {
                d=a;
                m=i;
                break;
            }
            else
            {
                a=a-months[i];
            }
            months[2]=28;
        }
        printf("%04d-%02d-%02d\n",y,m,d);
    }
}
import datetime as dt
n=int(input())
for _ in range(n):
    y,m,d,a=map(int,input().split())
    x=dt.date(y,m,d)
    x+=dt.timedelta(a)
    print(x.isoformat())

知识点

对于闰年二月的处理

直接对months[2]进行更改,然后末尾再改回来 months[2]=28;

if (i==2 )
{
    int flag=0;
    if (y%400==0 && y%100==0 || y%100!=0 && y%4==0)
    {
        flag=1;
        // printf("%d is True\n",y);
    }
    months[2]+=flag; //这地方本来写的a=a-flag,有些数据就是过不了,改成这样
}

python的datetime模块

这个库很强大,处理问题很简单
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码_python_脚本之家 (jb51.net)