《算法笔记》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;
}
相关推荐
诸葛思颖2 分钟前
【论文阅读笔记】FedProx
论文阅读·笔记
十安_数学好题速析22 分钟前
不等证明:从柯西不等式到裂项相消
笔记·学习·高考
wdfk_prog32 分钟前
[Linux]学习笔记系列 -- [kernel]signal
linux·笔记·学习
九年义务漏网鲨鱼33 分钟前
【多模态大模型面经】现代大模型架构(一): 组注意力机制(GQA)和 RMSNorm
人工智能·深度学习·算法·架构·大模型·强化学习
闲人编程41 分钟前
CPython与PyPy性能对比:不同解释器的优劣分析
python·算法·编译器·jit·cpython·codecapsule
杜子不疼.1 小时前
【C++】深入解析AVL树:平衡搜索树的核心概念与实现
android·c++·算法
小武~1 小时前
Leetcode 每日一题C 语言版 -- 88 merge sorted array
c语言·算法·leetcode
e***U8201 小时前
算法设计模式
算法·设计模式
charlie1145141912 小时前
使用 Poetry + VS Code 创建你的第一个 Flask 工程
开发语言·笔记·后端·python·学习·flask·教程
AA陈超2 小时前
Lyra项目中的输入系统
c++·笔记·学习·游戏·ue5·lyra