《算法笔记》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;
}
相关推荐
tankeven几秒前
HJ174 交换到最大
c++·算法
农村小镇哥1 分钟前
Html的字体+字符编码+图片标签
chrome·笔记·html
AI科技星2 分钟前
基于v≡c第一性原理:密度的本质与时空动力学
人工智能·学习·算法·机器学习·数据挖掘
kishu_iOS&AI2 分钟前
机器学习 —— 聚类算法
人工智能·算法·机器学习·聚类
FluxMelodySun9 分钟前
机器学习(三十一) 半监督SVM与图半监督学习
人工智能·算法·机器学习
磊 子16 分钟前
八大排序之插入排序+希尔排序
数据结构·算法·排序算法
kishu_iOS&AI17 分钟前
机器学习 —— 逻辑回归(混淆矩阵)
人工智能·算法·机器学习·逻辑回归
W230357657321 分钟前
经典算法:打家劫舍(动态规划 + 回溯求最优解)C++ 超详细解析
c++·算法·动态规划
Dev7z21 分钟前
基于改进小波阈值的sEMG信号降噪与手势识别系统设计与实现
算法·手势识别·改进小波阈值·semg·信号降噪
灵感__idea8 小时前
Hello 算法:贪心的世界
前端·javascript·算法