蓝桥杯高频考点-与日期相关的题目

文章目录

  • 前言
  • 1. 如何枚举合法日期
    • 1.1 预存每个月的天数
    • 1.2 封装一个判断日期是否合法的函数
    • 1.3 枚举日期并判断日期是否合法
  • 2. 判断日期是否为回文日期
    • 2.1 将日期当作字符串进行处理
    • 2.2 将日期当作一个8位数进行处理
  • 3. 给定初始日期,计算经过n天后对应的日期
    • 3.1 得到某年某月的天数
    • 3.2 计算经过n天后的日期
  • 4. 练习
    • 4.1 回文日期
    • 4.2 跑步锻炼
    • 4.3 日期统计
    • 4.4 回文日期
  • 5. 拓展-与时间相关的题目
    • 5.1 例题
      • 5.1.1 题目描述
      • 5.1.2 题目链接
    • 5.2 解题思路
    • 5.3 参考题解

前言

纵观蓝桥杯近几年的真题,与日期相关的题目经常出现

为了节省我们宝贵的比赛时间,对于与日期相关的题目,我们需要构造一套属于自己的模版

1. 如何枚举合法日期

对于日期,我们一般把它当作一个8位的数字进行处理,前四位数字是年份,第五位和第六位数字是月份,最后两位数字是当前月份的天数

一般是先枚举日期,再判断日期是否合法

1.1 预存每个月的天数

创建一个全局范围的数组,用于预存每个月的天数。

之所以要创建全局范围的数组,是为了避免函数之间的传参操作。

int days[15] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

1.2 封装一个判断日期是否合法的函数

bool isLegal(int date) {int year = date / 10000;int month = date / 100 % 100;int day = date % 100;if (month > 12 || month < 1) {return false;}if (day < 1 || day > 31) {return false;}int isLeap = 0;if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {isLeap = 1;}if (month == 2) {if (day > days[month] + isLeap) {return false;}} else {if (day > days[month]) {return false;}}return true;
}

1.3 枚举日期并判断日期是否合法

以2024年为例,枚举2024年的所有合法日期

#include <iostream>using namespace std;int days[15] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};bool isLegal(int date) {int year = date / 10000;int month = date / 100 % 100;int day = date % 100;if (month > 12 || month < 1) {return false;}if (day < 1 || day > 31) {return false;}int isLeap = 0;if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {isLeap = 1;}if (month == 2) {if (day > days[month] + isLeap) {return false;}} else {if (day > days[month]) {return false;}}return true;
}int main() {std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);for (int i = 20240101; i <= 20241231; i++) {if (isLegal(i)) {cout << i << endl;}}return 0;
}

2. 判断日期是否为回文日期

方法2.2的运行效率远高于方法2.1

如果开始日期和结束日期相差超过100年,建议使用方法2.2

2.1 将日期当作字符串进行处理

要判断一个日期是否是回文日期,可以先将该日期转成字符串

将反转后的字符串与原字符串对比,如果相等则说明该日期是回文日期

该方法需要包含<string>头文件和<algorithm>头文件,而且C++的版本要大于等于C++11

bool check01(int date) {string str = to_string(date);string temp = str;reverse(temp.begin(), temp.end());return str == temp;
}

check01函数也可写成下面的形式(无需包含<algorithm>头文件)

bool check01(int date) {string str = to_string(date);if (str[0] == str[7] && str[1] == str[6] && str[2] == str[5] && str[3] == str[4]) {return true;}return false;
}

2.2 将日期当作一个8位数进行处理

将日期当作一个8位数的整数,利用基础的运算符号反转整数,然后判断反转后的整数与原整数是否相等

bool check02(int date) {int originalNumber = date;int reverseNumber = 0;while (date != 0) {reverseNumber = reverseNumber * 10 + date % 10;date = date / 10;}return originalNumber == reverseNumber;
}

以下例子求的是1949年到2049年之间的所有回文日期

#include <iostream>
#include <string>
#include <algorithm>using namespace std;int days[15] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};bool isLegal(int date) {int year = date / 10000;int month = date / 100 % 100;int day = date % 100;if (month > 12 || month < 1) {return false;}if (day < 1 || day > 31) {return false;}int isLeap = 0;if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {isLeap = 1;}if (month == 2) {if (day > days[month] + isLeap) {return false;}} else {if (day > days[month]) {return false;}}return true;
}bool check01(int date) {string str = to_string(date);string temp = str;reverse(temp.begin(), temp.end());return str == temp;
}bool check02(int date) {int originalNumber = date;int reverseNumber = 0;while (date != 0) {reverseNumber = reverseNumber * 10 + date % 10;date = date / 10;}return originalNumber == reverseNumber;
}int main() {std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);for (int i = 19490101; i <= 20491231; i++) {if (isLegal(i) && check02(i)) {cout << i << endl;}}return 0;
}

3. 给定初始日期,计算经过n天后对应的日期

3.1 得到某年某月的天数

int getDay(int year, int month) {if (month != 2) {return days[month];} else {int leap = year % 400 || (year % 4 == 0 && year % 100 != 0);return 28 + leap;}
}

3.2 计算经过n天后的日期

int pass(int startDate, int n) {int year = startDate / 10000;int month = startDate / 100 % 100;int day = startDate % 100;for (int i = 1; i <= n; i++) {day++;if (day > getDay(year, month)) {month++;day = 1;}if (month > 12) {year++;month = 1;}}return year * 10000 + month * 100 + day;
}

4. 练习

4.1 回文日期

题目链接:回文日期

4.2 跑步锻炼

题目链接:跑步锻炼

4.3 日期统计

题目链接:日期统计

4.4 回文日期

题目链接:回文日期

5. 拓展-与时间相关的题目

处理时间一般会使用到运用求余、除法这两种基本运算

5.1 例题

5.1.1 题目描述


在这里插入图片描述

5.1.2 题目链接

题目链接:时间显示

5.2 解题思路

  • long long类型的数据接收数据

  • 由于题目给出的时间是以毫秒为单位的,因此要先将时间除以1000变成以秒为单位

  • 因为不需要显示年、月、日,所以要先过滤掉年、月、日的秒数

  • 最后,利用求余、除法运算得到时、分、秒

5.3 参考题解

时、分、秒不足两位时要补前导0

#include <cstdio>using namespace std;int main() {long long time;scanf("%lld", &time);time = time / 1000; // 将以毫秒为单位转化为以秒为单位time = time % (60 * 60 * 24); // 过滤掉年、月、日的秒数long long hour = time / 3600; // 一小时3600秒long long minute = time / 60 % 60; // 一分钟60秒long long second = time % 60;printf("%02lld:%02lld:%02lld", hour, minute, second);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/19917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

职场中,那些35岁以上的测试猿到底去哪了?

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

使用KEPServer连接欧姆龙PLC获取对应标签数据(标签值类型改为字符串型)

1.创建通道&#xff08;通道&#xff09;&#xff0c;&#xff08;选择对应的驱动&#xff0c;跟当前型号PLC型号对应&#xff09;。 2.创建设备&#xff0c;&#xff08;填入IP地址以及欧姆龙的默认端口号&#xff1a;44818&#xff09; 3.创建对应的标签。这里关键讲诉下字…

AI 网页解锁器,用于网页抓取一切 | 最快的验证码解决服务

想象一下&#xff0c;解锁互联网的全部潜力&#xff0c;数据自由流动&#xff0c;没有任何障碍阻挡你获取所需信息。在网络爬虫的世界里&#xff0c;这个梦想常常会遇到障碍&#xff1a;CAPTCHA和反机器人措施&#xff0c;这些措施旨在保护网站免受自动化访问的侵害。但如果有一…

【VSCode】快捷方式log去掉分号

文章目录 一、引入二、解决办法 一、引入 我们使用 log 快速生成的 console.log() 都是带分号的 但是我们的编程习惯都是不带分号&#xff0c;每次自动生成后还需要手动删掉分号&#xff0c;太麻烦了&#xff01; 那有没有办法能够生成的时候就不带分号呢&#xff1f;自然是有…

uni-app的网络请求库封装及使用(同时支持微信小程序)

其实uni-app中内置的uni.request()已经很强大了&#xff0c;简单且好用。为了让其更好用&#xff0c;同时支持拦截器&#xff0c;支持Promise 写法&#xff0c;特对其进行封装。同时支持H5和小程序环境&#xff0c;更好用啦。文中给出使用示例&#xff0c;可以看到使用变得如此…

【C++】——string模拟实现

前言 string的模拟实现其实就是增删改查&#xff0c;只不过加入了类的概念。 为了防止与std里面的string冲突&#xff0c;所以这里统一用String。 目录 前言 一 初始化和销毁 1.1 构造函数 1.2 析构函数 二 迭代器实现 三 容量大小及操作 四 运算符重载 4.1 bool…

Unity【入门】脚本基础

Unity脚本基础 文章目录 1、脚本基本规则1、创建规则2、MonoBehavior基类3、不继承MonoBehavior的类4、执行的先后顺序5、默认脚本内容 2、生命周期函数1、概念2、生命周期函数有哪些3、生命周期函数支持继承多态 3、Inspector窗口可编辑的变量4、Mono中的重要内容1、重要成员2…

冯喜运:5.31晚间黄金原油行情分析及尾盘操作策略

【黄金消息面分析】&#xff1a;周五&#xff08;5月31日&#xff09;&#xff0c;最新发布的数据显示&#xff0c;美国4月核心PCE物价指数月率录得0.2%&#xff0c;低于预期(0.3%)&#xff0c;经济学家认为&#xff0c;核心指数比整体指数更能反映通胀。除此之外&#xff0c;美…

HackTheBox-Machines--Sense

Popcorn 测试过程 1 信息收集 服务器开启80、443端口 80端口 访问 80 跳转到 443 – https://10.129.196.51/ &#xff0c;该页面是 pfSense 登录界面&#xff0c;默认密码是&#xff1a; admin/pfSense&#xff0c;使用默认账号密码登录失败 目录扫描 ./gobuster dir -u htt…

深度神经网络——什么是线性回归?

线性回归是一种用于预测或可视化的算法 两个不同特征/变量之间的关系。 在线性回归任务中&#xff0c;要检查两种变量&#xff1a; 因变量和自变量。 自变量是独立的变量&#xff0c;不受其他变量的影响。 随着自变量的调整&#xff0c;因变量的水平将会波动。 因变量是正在研究…

三体中的冯诺依曼

你叫冯诺依曼&#xff0c;是一位科学家。你无法形容眼前的现态&#xff0c;你不知道下一次自己葬身火海会是多久&#xff0c;你也不知道会不会下一秒就会被冰封&#xff0c;你唯一知道的&#xff0c;就是自己那寥寥无几的科学知识&#xff0c;你可能会抱着他们终身&#xff0c;…

《QT实用小工具·六十九》基于QT开发的五子棋AI游戏

1、概述 源码放在文章末尾 该项目实现了五子棋对战AI&#xff0c;可以享受和AI下棋的快乐&#xff0c;项目实现思路如下&#xff1a; 博弈树 ●Alpha-Beta剪枝(性能提高较大) ●启发式搜索(性能提高较大) ●落子区域限制(性能提高较大) ●Zobrist哈希(性能小幅提升) ●Qt…

数据治理基础知识

文章目录 基本概念相关名词术语数据治理对象 基本概念 1&#xff09;从管理者视角看数据治理 数据治理是企业发展战略的组成部分&#xff0c;是指导整个集团进行数字化变革的基石&#xff0c;要将数据治理纳入企业的顶 层规划&#xff0c;各分/子公司、各业务部门都需要按照企…

软考高级系统规划与管理师适合什么人考?有什么优势?

系统规划与管理师适合什么人考&#xff1f; 适合以下几类人群&#xff1a; 1. 信息技术服务规划人员&#xff1a;从事信息技术服务规划工作&#xff0c;负责制定和优化IT服务规划的人 2. 信息系统运行维护管理人员&#xff1a;负责信息系统日常运行维护、确保系统稳定性和可…

【前端】Mac安装node14教程

在macOS上安装Node.js版本14.x的步骤如下&#xff1a; 打开终端。 使用Node Version Manager (nvm)安装Node.js。如果你还没有安装nvm&#xff0c;可以使用以下命令安装&#xff1a; curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash 然后关…

变压器励磁涌流MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 变压器励磁涌流的产生机理 1、变压器是电力系统的关键部分&#xff0c;在实际的 运行中&#xff0c;变压器需要进行相应的充电&#xff0c;而在充电的过 程中&#xff0c;就需要进行开合闸作业。在开合闸作业…

【Linux】磁盘结构文件系统软硬链接动静态库

目录 一.磁盘结构 1、磁盘的物理结构 2、磁盘的存储结构 3、磁盘的逻辑结构 二.文件系统 1、对IO单位的优化 2、磁盘分区与分组 3、对分组的具体管理方法 4、文件操作 三.软硬链接 1、理解硬链接 2、理解软连接 3、理解.和.. 四、动静态库 1、什么是动静态库 2、…

Flutter基础 -- Dart 语言 -- 基础类型

目录 0. 配置 1. 变量 1.1 弱类型 var Object dynamic 1.2 强类型 1.3 使用场景 var 简化定义变量 查询参数定义 返回的实例对象 2. 常量 final 和 const 2.1 相同点 类型声明可以省略 初始后不能再赋值 不能和 var 同时使用 2.2 不同点 const 需要确定的值 …

线性代数|机器学习-P1课程简介

文章目录 1. 书籍下载2. 正文 1. 书籍下载 链接&#xff1a;https://pan.baidu.com/s/1QbK0enLh0x4nU1c4Tqwlkw 提取码&#xff1a;r7ft 本课程回顾线性代数在概率论、统计学、优化和深度学习中的应用。是GILBERT STRANG教授的有一个经典的课程。课程将线性代数分为如下部分&a…

利用“记忆化搜索“解斐波那契数

一、题目描述 求第 n 个斐波那契数。 二、 利用"记忆化搜索"解斐波那契数 什么是记忆化搜索&#xff1f;记忆化搜索就是带有备忘录的递归。 我们先来看一下使用递归来解斐波那契数的这个过程&#xff0c;假设求第5个斐波那契数F(5)。 由图可见&#xff0c;要重复计…