《算法笔记》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;
}
相关推荐
PixelMind2 小时前
【LUT技术专题】图像自适应3DLUT
图像处理·深度学习·算法·3dlut
木子.李3473 小时前
数据结构-算法学习C++(入门)
数据库·c++·学习·算法
GIS小天3 小时前
AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年5月31日第94弹
人工智能·算法·机器学习·彩票
Y学院4 小时前
Vue 技术文档
vue.js·笔记·学习
DIY机器人工房4 小时前
[9-2] USART串口外设 江协科技学习笔记(9个知识点)
笔记·科技·stm32·单片机·学习·江协科技
武子康4 小时前
大数据-274 Spark MLib - 基础介绍 机器学习算法 剪枝 后剪枝 ID3 C4.5 CART
大数据·人工智能·算法·机器学习·语言模型·spark-ml·剪枝
蒙奇D索大5 小时前
【11408学习记录】考研英语写作提分秘籍:2013真题邀请信精讲+万能模板套用技巧
笔记·学习·考研·改行学it
霸王蟹6 小时前
React 项目中封装 Excel 导入导出组件:技术分享与实践
前端·笔记·学习·react.js·typescript·excel·vite
爱coding的橙子6 小时前
每日算法刷题Day19 5.31:leetcode二分答案3道题,用时1h
算法·leetcode·职场和发展
地平线开发者7 小时前
征程 6EM 常见 QConfig 配置解读与示例
算法·自动驾驶