日期遍历问题模板

Freak 发布于 13 天前 7 次阅读


AI 摘要

在编程的世界中,日期的计算似乎是一项简单的任务,但实际上却隐藏着丰富的挑战与奥秘。从闰年到每月天数的复杂判断,本文将带你深入探索日期遍历的核心问题模板。通过一个实用的例题,我们将学习如何编写高效代码,以准确计算从2000年1月1日到2000年5月4日之间的天数。准备好揭开这一编程难题的面纱了吗?让我们开始吧!

模板

for (int year = 2000; year <= 2024; year++) {
        for (int month = 1; month <= 12; month++) {
            for (int day = 1; day <= 31; day++) {
                // 判断每个月的天数
                if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
                    if (day > 31) break; // 31天的月份
                } else if (month == 2) {
                    // 闰年判断
                    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
                        if (day > 29) break; // 闰年2月29天
                    } else {
                        if (day > 28) break; // 平年2月28天
                    }
                } else {
                    if (day > 30) break; // 30天的月份
                }

例题

计算从2000年1月1日2000年5月4日经过的天数

#include <bits/stdc++.h>
using namespace std;

int main() {
    int cnt = 0; // 初始化为0,表示经过的天数

    // 从2000年1月1日开始统计
    for (int year = 2000; year <= 2024; year++) {
        for (int month = 1; month <= 12; month++) {
            for (int day = 1; day <= 31; day++) {
                // 判断每个月的天数
                if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
                    if (day > 31) break; // 31天的月份
                } else if (month == 2) {
                    // 闰年判断
                    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
                        if (day > 29) break; // 闰年2月29天
                    } else {
                        if (day > 28) break; // 平年2月28天
                    }
                } else {
                    if (day > 30) break; // 30天的月份
                }

                // 统计经过的天数,起始日期为2000年1月1日
                cnt++;

                // 如果达到目标日期,输出结果
                if (year == 2000 && month == 5 && day == 4) {
                    cout << cnt << endl;
                    return 0;
                }
            }
        }
    }
}