当前位置: 首页 > news >正文

日期题模版(made by yyf)

日期题通常包括:判断是否为闰年,计算某年某月有多少天,日期自增,遍历日期等,这里给出总结

判断是否为闰年

首先什么是闰年,闰年具有哪些特征?如果是整百年(如2000,1700)要被400整除才是闰年,否则为平年(2000闰年,1700平年);如果是非整百年(如2008,2009),只要被4整除就是闰年,不能被4整除为平年(2008闰年,2009平年)。

所以判断是否为闰年的写法就很固定:

static boolean isLeap(int y){ return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0); }

也就是闰年是能被4整除且不能被100整除或者能被400整除的数字,平年的2月份只有28天而闰年2月份有29天。

计算某年有某月有几天

boolean isLeap(int year){ return (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0); } int daysInMonth(int y, int m){ int[] d = {0,31,28,31,30,31,30,31,31,30,31,30,31}; if(m == 2 && isLeap(y)) return 29; return d[m]; }

给你一个年月返回有多少天,d代表每个月有多少天,如果是闰年2月份返回29天

日期自增

boolean isLeap(int year){ return (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0); } int daysInMonth(int y, int m){ int[] d = {0,31,28,31,30,31,30,31,31,30,31,30,31}; if(m == 2 && isLeap(y)) return 29; return d[m]; } int[] nextDay(int y, int m, int d){ d++; if(d > daysInMonth(y,m)){ d = 1; m++; if(m > 12){ m = 1; y++; } } return new int[]{y,m,d}; }

1.先让日期自增,d++,比如 2016-11-18 → d=19 2.如果日期超过该月天数,d=1换月,月自增,如果月超过12,年自增,最后返回年月日,

枚举日期区间

while(!(y1==y2 && m1==m2 && d1==d2)){ // 在这里写你的逻辑,例如判断是否回文 int[] next = nextDay(y1, m1, d1); y1 = next[0]; m1 = next[1]; d1 = next[2]; } // 最后一天也要处理

只要不是结束日期,就继续加一天。

你能枚举区间中的每一天,例如:判断是否回文,判断日期是否合法,累计天数,统计某种日期天数,例如周六周末。

例:给出一个日期区间,判断区间内有多少回文日期

记住:回文日期不需要枚举每天,回文日期由年份决定。

注意:要判断日期是否合法(月份要满足1<=m<=12,天数要满足在当月天数内)

import java.util.*; public class Main{ static boolean isLeap(int y){ return (y%400==0 || (y%4==0 && y%100!=0)); } static int daysInMonth(int y,int m){ int[] d = {0,31,28,31,30,31,30,31,31,30,31,30,31}; if(m==2 && isLeap(y)) return 29; return d[m]; } // 把 YYYYMMDD 转成整数便于比较 static int makeDate(int y){ int m = y % 100; int d = y / 100; return y * 10000 + m * 100 + d; } public static void main(String[] args){ Scanner sc = new Scanner(System.in); int L = sc.nextInt(); int R = sc.nextInt(); int lYear = L / 10000; int rYear = R / 10000; int ans = 0; for(int y = lYear; y <= rYear; y++){ int m = y % 100; int d = y / 100; // 月份非法 if(m < 1 || m > 12) continue; // 日期非法 if(d < 1 || d > daysInMonth(y, m)) continue; int date = makeDate(y); // 判断是否在区间内 if(date >= L && date <= R) ans++; } System.out.println(ans); } }

模版需要背

http://www.zskr.cn/news/83944.html

相关文章:

  • 2025中国电缆一线品牌推荐,中国电缆十大品牌推荐:知名品牌12月TOP榜单 - 品牌2026
  • K8S系列之6.1:自定义扩展(CRD 与 Operator 设计模式)
  • 基于密集型复杂城市场景下求解无人机三维路径规划的Q-learning 算法研究(Matlab代码实现)
  • Day25
  • Day 36 MLP神经网络的训练
  • 中国台湾阳明交大团队让AI帮你实现真正的冻结时光
  • 工作生活没有节奏感怎么办?
  • 深入剖析高并发场景下ZooKeeper服务端Watcher实现原理
  • 量子计算开发者必看(VSCode性能调优实战手册)
  • TinyMCE5支持Latex公式转图片资源导入
  • 实习面试题-Go 性能优化面试题
  • 搞懂“元数据”:给数据办一张“身份证”
  • 04_C 语言进阶之避坑指南:多重 if-else 及多重条件混乱 —— 让逻辑不再 “绕迷宫”
  • [powershell 入门]第9天:PowerShell 安全、代码签名与企业部署 作业及深度解析
  • 【每天学习一点算法 2025/12/11】合并两个有序链表
  • 2025 最新货代 / 货运代理服务商 TOP5 评测!深度覆盖欧美加专线,全链路方案 + 全球网络权威榜单发布,赋能跨境电商与传统外贸高效出海 - 全局中转站
  • 2025 最新货代方案服务商 / 厂家 TOP5 评测!深度覆盖欧美加专线,全链路协同 + 跨境直达权威榜单发布,赋能电商全球化布局新生态 - 全局中转站
  • 基于Java Spring Boot的相机租赁系统的设计与实现-毕业设计源码50424
  • Python学习日记:探索列表的奥秘与编程乐趣
  • Windows上解决test.c LINK : fatal error LNK1181: 无法打开输入文件“aio.lib” 无法打开输入文件“cufile.lib”
  • 第十一章篇 实现拦截器
  • Docker Buildx构建缓慢?你必须知道的7个Agent镜像优化实践
  • 8 个自考论文降重工具,AI 免费网站推荐
  • 新手鱼竿推荐:新手买钓鱼竿怎么选?2025年鱼竿新手入门推荐 - 品牌2026
  • 卡内基跨学科团队利用随机森林模型,基于406份样本成功捕捉33亿年前生命遗迹
  • 【STM32】低功耗
  • 区间DP第2课:区间DP应用案例实践1
  • 基于 ESP32 的对话机器人实现:整合 Coze 大模型、百度千帆 ASR 与 TTS
  • MySQL 主从同步与读写分离详解
  • OpenHarmony Flutter 分布式安全与隐私保护:跨设备可信交互与数据防泄漏方案