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

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

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来得到一共有多少周,也就有多少个周一,再算上余数即可,这里感觉不太直观。
相关推荐
快乐点吧40 分钟前
BERT 模型在句子分类任务中的作用分析笔记
笔记·分类·bert
逻辑与&&43 分钟前
[Prometheus学习笔记]从架构到案例,一站式教程
笔记·学习·prometheus
齐 飞1 小时前
MongoDB笔记03-MongoDB索引
前端·数据库·笔记·后端·mongodb
柔软阳光1 小时前
(四)、Manticore Search学习笔记之本地表介绍
数据库·笔记·学习
lunjiahao2 小时前
GJ Round (2024.10) Round 8~21
笔记·题解·杂题
细心的莽夫2 小时前
JavaWeb学习笔记
java·开发语言·笔记·学习·java-ee·web
最好有梦想~2 小时前
FPGA时序分析和约束学习笔记(4、IO传输模型)
笔记·学习·fpga开发
华东同舟求职2 小时前
舜宇光学科技入职测评:北森商业推理40分钟28题真题解析、网盘资料下载、答题技巧
经验分享·科技·职场和发展·求职招聘
TMDOG6663 小时前
PostgreSQL 学习笔记:PostgreSQL 主从复制
笔记·学习·postgresql