蓝桥杯练习笔记(二十-日期问题)

日期题常见于填空题,关键点涉及闰年的判断和星期几的判断

1.根据间隔天数计算日期

题目来源:CSDN算法技能树

在X星系的广袤空间中漂浮着许多X星人造"炸弹",用来作为宇宙中的路标。

每个炸弹都可以设定多少天之后爆炸。

比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。

有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。

提示:

先判断是否为闰年,这会影响2月份是28还是29,如果是闰年,2月份是29,如果不是,就是28

cpp 复制代码
#include <stdio.h>

int main()
{
    int monthDays[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int days = 1000;
    int year = 2014, month = 11, day = 9;
    int i;

    for (i = 0; i < days; i++)
    {
        day++;
        if (day > monthDays[month - 1])
        {
            day = 1;
            month++;
            if (month > 12)
            {
                month = 1;
                year++;
                if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0))
    				monthDays[1] = 29;
				else
    				monthDays[1] = 28;                                                                    
            }
        }
    }

    printf("%d-%d-%d\n", year, month, day);

    getchar();
    return 0;
}

关键点

  • 闰年的判断(能被400整除 或者 能被4整除但同时不能被100整除)
  • 月份用数组来存储,根据是否闰年来修改2月的值

2.根据间隔天数判断星期几

整个20世纪(1901年1月1日至2000年12月31日之间),一共有多少个星期一?(其中已知1901年1月1日是星期二)

提示:

判断1901年1月1日到2000年12月31的每一天是星期几,如果是星期一则统计的个数+1。

cpp 复制代码
#include <stdio.h>
int main()
{
    int year, day, dayrun = 0, dayping = 0, sumday = 0;
    int count = 0;

    for (year = 1901; year <= 2000; year++)
    {
        if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
        {
            dayrun += 366;
        }
        else
        {
            dayping += 365;
        }
    }

    sumday = dayrun + dayping;

    for (day = 2; day <= sumday - 7; day += 7)
	{
    	count++;
	}
    printf("%d", count);
    return 0;
}

关键点

  • 已知起始日期和最终日期我们就能得知一共有多少天(不管是直接按这里这种根据年份直接计算还是按照最上面的题目一样直接遍历得到都行)
  • 这里最后这个for循环写得有点看不明白,在我看来先将总共天数减去6,然后就能直接除以7来得到一共有多少周,也就有多少个周一,再算上余数即可,这里感觉不太直观。
相关推荐
jiayong236 小时前
面试中遇到不熟悉问题的应对策略深度解析
面试·职场和发展
sheeta19987 小时前
LeetCode 每日一题笔记 日期:2026.05.29 题目:3300. 最小元素
笔记·leetcode
中屹指纹浏览器7 小时前
2026指纹浏览器代理链路适配原理与多线路集群调度方案
经验分享·笔记
不羁的木木7 小时前
ArkWeb实战学习笔记05-综合实战:构建混合应用
笔记·学习·harmonyos
CC大煊8 小时前
一个Javaer的AI转型笔记(1):入坑LangChain,我的第一个hello world
笔记·langchain
JAVA社区8 小时前
Java高级全套教程(十)—— SpringCloudAlibaba超详细实战详解
java·开发语言·spring cloud·面试·职场和发展
元气少女小圆丶10 小时前
SenseGlove Nova 2+Unity开发笔记1
笔记·学习·unity
冰暮流星10 小时前
javascript之history对象介绍
前端·笔记
jialiguo11 小时前
博客摘录「 尚硅谷Vue3入门到实战,最新版Vue3+TypeScript前端开发教程」2024年8月7日
笔记
过期动态12 小时前
【LeetCode 热题 100】接雨水
java·数据结构·算法·leetcode·职场和发展