当前位置: 首页 > 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.cnnetsun.cn/news/9862.html

相关文章:

  • 【活动总结】创药沙龙第一期:ADC药物研发的挑战与机遇成功举办
  • 如何用免费工具3分钟终极优化Windows右键菜单:告别杂乱,提升300%操作效率
  • Day25
  • 工具 | netcat, netstat
  • AI的下半场:智能体(Agent)将如何重塑我们所有的应用
  • soular全面介绍(4) - 通过soular工作台聚合TikLab所有工具链
  • R-Zero:从零数据自进化推理大语言模型
  • 弹~性布局
  • Wan2.2-T2V-A14B在地震波传播模拟教学中的科学准确性
  • Day 36 MLP神经网络的训练
  • B站视频下载终极指南:免费工具DownKyi完整使用教程
  • 搞懂“元数据”:给数据办一张“身份证”
  • 04_C 语言进阶之避坑指南:多重 if-else 及多重条件混乱 —— 让逻辑不再 “绕迷宫”
  • 量子计算开发者必看(VSCode性能调优实战手册)
  • Android嵌套滑动冲突完全解析:从原理到实战解决方案
  • ASTM D4169-DC13 标准,包装完整性
  • Linux新手必学:tail命令图解指南
  • 19、利用Scapy和Python进行网络数据包处理与扫描
  • 性能测试里MySQL的锁
  • OBS教程:OBS实时字幕插件如何下载?直播字幕翻译怎么弄?
  • MagicTime: Time-Lapse Video Generation Models asMetamorphic Simulators论文精读(1)
  • Laravel 13多模态表单处理:从入门到精通的6大实战场景,错过等于失业
  • 读捍卫隐私03同步
  • [Android] B站第三方电视TVapp BV_0.3.10
  • 【time-rs】 time-core crate 的 Cargo.toml 配置文件详解
  • 政府网站与政务新媒体考核指标有什么区别
  • FLUX.1 Kontext终极指南:重新定义AI图像编辑的边界
  • Java新手必看:System类为什么会出现安全警告?
  • 基于springboot的大学生实习就业管理系统
  • AXI-A7.4.1 Overview