《算法笔记》3.4小节——入门模拟->日期处理

日期差值

cpp 复制代码
#include <iostream>
using namespace std;
int month[13][2]={
        {0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},
        {31,31},{31,31},{30,30},{31,31},{30,30},{31,31}
};
bool is_leap(int year){
    return (year%4==0&&year%100!=0||year%400==0);
}

int main() {
    int time1,time2,y1,y2,m1,m2,d1,d2,count;
    while(cin>>time1){
        cin>>time2;
        count=1;
        if(time1>time2) swap(time1,time2);
        y1=time1/10000,m1=time1%10000/100,d1=time1%100;
        y2=time2/10000,m2=time2%10000/100,d2=time2%100;
        while(y1<y2||m1<m2||d1<d2){
            d1++;
            count++;
            if(d1==month[m1][is_leap(y1)]+1){
                m1++;
                d1=1;
            }
            if(m1==13){
                y1++;
                m1=1;
            }
        }
        cout<<count<<endl;
    }
    return 0;
}

问题 B: Day of Week

cpp 复制代码
#include <iostream>
using namespace std;
int days[12][2]={{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31}};
string week[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
string month[12] = {"January","February","March","April","May","June","July","August","September","October","November","December"};
bool is_leap(int year){ return (year%4==0&&year%100!=0||year%400==0); }
int to_day(int day,int m,int year){
    int count=0;
    for (int i = 1; i < year; ++i) {
        if(is_leap(i)) count+=366;
        else count+=365;
    }
    for (int i = 0; i <m-1 ; ++i) {
        count=count+days[i][is_leap(year)];
    }
    count=count+day;
    return count;
}

int main() {
    int day,year,mon;
    string monstr;
    while(cin>>day>>monstr>>year){
        for (int i = 0; i < 12; ++i) {
            if(monstr==month[i]) mon=i+1;
        }
        int ans= to_day(day,mon,year)%7;
        cout<<week[ans]<<endl;
    }
    return 0;
}

打印日期

cpp 复制代码
#include <cstdio>
int days[12][2]={{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31}};
bool is_leap(int year){ return (year%4==0&&year%100!=0||year%400==0); }

int main() {
    int year,mon,day,count;
    while(scanf("%d %d",&year,&count)!=EOF){
        mon=1;
        day=0;
        while(count--){
            day++;
            if(day==days[mon-1][is_leap(year)]+1) {
                mon++;
                day=1;
            }
        }
        printf("%04d-%02d-%02d\n",year,mon,day);
    }
    return 0;
}

日期类

cpp 复制代码
#include <cstdio>
int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
bool is_leap(int year){ return (year%4==0&&year%100!=0||year%400==0); }
int main() {
    int m,year,mon,day;
    scanf("%d",&m);
    for (int i = 0; i < m; ++i) {
        scanf("%d %d %d",&year,&mon,&day);
        day++;
        if(day==days[mon-1]+1){
            mon++;
            day=1;
        }
        if(mon==13){
            year++;
            mon=1;
        }
        printf("%04d-%02d-%02d\n",year,mon,day);
    }
    return 0;
}

日期累加

cpp 复制代码
#include <cstdio>
int days[12][2]={{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31}};
bool is_leap(int year){ return (year%4==0&&year%100!=0||year%400==0); }

int main() {
    int m,year,mon,day,count;
    scanf("%d",&m);
    for (int i = 0; i < m; ++i) {
        scanf("%d %d %d %d",&year,&mon,&day,&count);
        while(count--){
            day++;
            if(day==days[mon-1][is_leap(year)]+1) {
                mon++;
                day=1;
            }
            if(mon==13){
                year++;
                mon=1;
            }
        }
        printf("%04d-%02d-%02d\n",year,mon,day);
    }
    return 0;
}
相关推荐
不会编程的懒洋洋15 小时前
VisionPro 中 图像预处理工具
图像处理·笔记·c#·视觉检测·visionpro
故事和你9115 小时前
洛谷-【动态规划1】动态规划的引入2
开发语言·数据结构·c++·算法·动态规划·图论
重生之我是Java开发战士15 小时前
【动态规划】背包问题:完全背包,二位费用的背包问题,似包非包
算法·动态规划
LabVIEW开发15 小时前
LabVIEW实现FDTD 电磁仿真
算法·labview·labview知识·labview功能·labview程序
阳光宅男@李光熠16 小时前
【电子通识】贴片电阻上的丝印332、5R6、1502、01C怎么读出阻值?
笔记·学习
Together_CZ16 小时前
DTSemNet :Vanilla Gradient Descent for Oblique Decision Trees——用于倾斜决策树的普通梯度下降
算法·决策树·机器学习·vanilla·gradient·dtsemnet·用于倾斜决策树的普通梯度
一条大祥脚16 小时前
ABC459 贪心构造|树形DP|组合数学|贪心|单调栈|势能|前缀和
算法·深度优先
iCxhust16 小时前
AD0808调试笔记
笔记·单片机·嵌入式硬件·操作系统·微机原理·8088单板机
灰灰勇闯IT16 小时前
DeepEP:MoE 推理的 AllToAll 通信瓶颈怎么解
算法·cann
一行代码一行诗++16 小时前
goto语句
java·开发语言·算法