首页 > 试题广场 >

回文日期

[编程题]回文日期
  • 热度指数:4947 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}一个日期用 \sf YYYYMMDD8 位数字表示,其中前四位为年份,接着两位为月份,最后两位为日期。

\hspace{15pt}若这 8 位数字本身是一个回文数,则称该日期为回文日期

\hspace{15pt}给定起始日期 a 与终止日期 b(均包含在内,且满足 a\leqq b),请计算区间内真实存在的回文日期数量。

\hspace{15pt}【名词解释】回文数:一个数字从左往右读与从右往左读完全相同。

\hspace{15pt}【日期合法性】
\hspace{23pt}\bullet\, 1,3,5,7,8,10,12 月有 31 天;
\hspace{23pt}\bullet\, 4,6,9,11 月有 30 天;
\hspace{23pt}\bullet\, 2 月在闰年29 天,平年有 28 天。

\hspace{15pt}【闰年判定】
\hspace{23pt}\bullet\, 能被 4 整除但不能被 100 整除的年份;
\hspace{23pt}\bullet\, 或能被 400 整除的年份。

输入描述:
\hspace{15pt}第一行输入 8 位整数 a,表示起始日期。
\hspace{15pt}第二行输入 8 位整数 b,表示终止日期。


输出描述:
\hspace{15pt}输出一个整数,表示 [a,b] 区间内回文日期的数量。
示例1

输入

20110101
20111231

输出

1

说明

\hspace{15pt}在这个样例中,在 \sf{20110101}\sf{20111231} 之间,回文日期有 1 个,即 \sf{20111102}
示例2

输入

20000101
20101231

输出

2

说明

\hspace{15pt}在这个样例中,在 \sf{20000101}\sf{20101231} 之间,回文日期有 2 个,即 \sf{20010002}\sf{20100102}
头像 Z_L_G
发表于 2025-02-26 22:39:24
题意 计数两日期之间的回文日期 思路 枚举所有年份,构造月份判断是否合法 枚举所有月份和日期,构造年月日看是否在区间内 但是,构造年份检查月份还要分大小月以及平年闰年,相对麻烦,故构造年月日是更为便捷的解法 AC代码 #include<bits/stdc++.h> using n 展开全文
头像 Silencer76
发表于 2025-08-09 02:50:48
题目链接 回文日期 题目描述 一个日期用8位数字 YYYYMMDD 表示。若这个8位数字本身是一个回文数,则称该日期为“回文日期”。 给定一个起始日期 date1 和一个终止日期 date2,请计算这个区间内(包含 date1 和 date2)所有真实存在的回文日期的数量。 日期合法性规则: 月必 展开全文
头像 手有余湘
发表于 2025-07-23 18:23:24
import sys start=input() end=input() result=0 for i in range(int(start[:4]),int(end[:4])+1): gh=None if (i%4==0 and i%100!=0) or i%400==0: 展开全文
头像 BraveCoder
发表于 2025-08-29 11:04:58
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); 展开全文
头像 lahm66
发表于 2025-11-05 08:48:58
Java回文,模拟,判断日期 import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { private static boolean isLeap(int year){ 展开全文
头像 丘馗
发表于 2026-01-08 10:29:05
#include <iostream> #include <iterator> #include <string> #include <algorithm> using namespace std; bool IsLeapYear(long long 展开全文
头像 RogeAustine
发表于 2025-12-23 21:19:46
// 这道题要注意的地方比较多,虽然不难但是真的很难受 #include <iostream> #include <string> using namespace std; // 果然忘记一个很重要的事情 int days[13] = {0,31,28,31,30,31,30 展开全文
头像 我是芭芭拉的狗
发表于 2025-12-25 23:08:22
n1 = input() n2 = input() sn = int(n1[0:4]) mn = int(n2[0:4]) sy = int(n1[4:6]) my = int(n2[4:6]) s = 0 for i in range(sn,mn+1): j = str(i)[::-1] 展开全文
头像 _已被标记为菜鸡_wnyyds
发表于 2026-02-02 10:23:40
本以为要判断闰年然后遍历a~b的每一个日期看看是不是回文日期但是很麻烦 比较好的思路就是通过月日来构造出年份,为什么可以这样做,如果是回文日期 那么年份必然是月日反过来,所以构造出年+月+日看看是不是在a,b之间,还有个疑问就是 data[2]为什么是29而不是28,难道不用判断闰年吗?922002 展开全文
头像 Deemo_ML
发表于 2026-01-01 03:00:50
根据月份数生成对应的回文串,然后在根据起始日期和终止日期进行判断 from datetime import datetime, timedelta a = int(input()) b = int(input()) t1 = datetime(1200, 1, 1) t2 = datetime(1 展开全文