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

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

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来得到一共有多少周,也就有多少个周一,再算上余数即可,这里感觉不太直观。
相关推荐
实心儿儿8 分钟前
算法9:相同的树
算法·leetcode·职场和发展
童话名剑11 分钟前
FCOS(学习笔记)
笔记·学习·fcos
请你喝好果汁64117 分钟前
GitHub 开发流程学习笔记
笔记·学习·github
XiYang-DING18 分钟前
【LeetCode】Easy | 387. 字符串中的第一个唯一字符
算法·leetcode·职场和发展
风123456789~25 分钟前
【架构专栏】第2章 计算机系统基础知识 1/3
笔记·架构
云边散步25 分钟前
godot2D游戏教程系列二(21)
笔记·学习·游戏·游戏开发
小陈phd41 分钟前
多模态大模型学习笔记(二十五)—— 核心技术篇② | 虚拟人的大脑:国内头部大语言模型全解析
笔记·学习·语言模型
浅念-1 小时前
Linux 基础命令与核心知识点
linux·数据结构·c++·经验分享·笔记·算法·ubuntu
The_Ticker1 小时前
日股实时行情接口使用指南
java·经验分享·笔记·python·算法·区块链
试试勇气1 小时前
Linux学习笔记(十九)--生产消费模型与线程安全
java·笔记·学习