题目描述

在日常生活中,通过年、月、日这三个要素可以表示出一个唯一确定的日期。

牛牛习惯用8位数字表示一个日期,其中,前4位代表年份,接下来2位代表月份,最后2位代表日期。显然:一个日期只有一种表示方法,而两个不同的日期的表示方法不会相同。

牛牛认为,一个日期是回文的,当且仅当表示这个日期的8位数字是回文的。现 在,牛牛想知道:在他指定的两个日期之间包含这两个日期本身),有多少个真实存在的日期是回文的。

一个8位数字是回文的,当且仅当对于所有的i ( 1 <=i<= 8 )从左向右数的第i个 数字和第9-i个数字(即从右向左数的第i个数字)是相同的。

例如:

•对于2016年11月19日,用8位数字20161119表示,它不是回文的。

•对于2010年1月2日,用8位数字20100102表示,它是回文的。

•对于2010年10月2日,用8位数字20101002表示,它不是回文的。

每一年中都有12个月份:

其中,1、3、5、7、8、10、12月每个月有31天;4、6、9、11月每个月有30天;而对于2月,闰年时有29天,平年时有28天。

一个年份是闰年当且仅当它满足下列两种情况其中的一种:

1.这个年份是4的整数倍,但不是100的整数倍;

2.这个年份是400的整数倍。

例如:

•以下几个年份都是闰年:2000、2012、2016。

•以下几个年份是平年:1900、2011、2014。

输入描述:

输入包括两行,每行包括一个8位数字。
第一行表示牛牛指定的起始日期。
第二行表示牛牛指定的终止日期。
保证datei和都是真实存在的日期,且年份部分一定为4位数字,且首位数字不为0。
保证date1 —定不晚于date2。

输出描述:

输出一行,包含一个整数,表示在date1和date2之间,有多少个日期是回文的。

示例1

输入

20110101
20111231

输出

1

说明

符合条件的日期是20111102。 

示例2

输入

20000101
20101231

输出

2

说明

符合条件的日期是20011002和20100102。 

备注:

对于60%的数据,满足date1 = date2。

遇到的问题:

刚开始想通过枚举给出的两个日期之间的正确日期来判断,但存在几个问题:

1.较难实现,需要判断的条件太多

2.复杂度过高,会t

解决思路:

后来,借鉴大佬的代码后发现,枚举的方向错了,原来的枚举存在大量不必要的计算,其实只需要通过真实存在的日期推出年份,再看得出的回文日期是否在范围内即可。

或者应该还可以用年份推日期,看日期是否正常(可能稍微复杂一些)

总之就是优化枚举的方向与具体步骤。

#include <bits/stdc++.h>using namespace std;int main()
{int d1,d2,date,year,month,day;cin>>d1>>d2;int cnt=0;int m[]={0,31,29,31,30,31,30,31,31,30,31,30,31};//打表,忽略闰年问题for(int month=1;month<=12;month++){for(int day=1;day<=m[month];day++){year=(day%10)*1000+(day/10)*100+(month%10)*10+month/10;//日期对应的年份date=year*10000+month*100+day;//完整日期if(date>=d1&&date<=d2){cnt++;}}}cout<<cnt;
}

[NOIP2016]回文日期相关推荐

  1. 洛谷 题解 P2010 【回文日期】

    因为有8个字符,所以可得出每一年只有一个回文日期. 因此只要判断每一年就行了. 做法: 我们先把年倒过来,例如2018年就倒为8102,就得出8102就是回文日期的后四个字符,我们只要判断一下有没有这 ...

  2. Python案例:输出指定要求的回文日期

    文章目录 一.提出任务 二.完成任务 (一)编写程序,实现功能 (二)运行程序,查看结果 一.提出任务 2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日.因为如果将 ...

  3. Python案例:输出公元后到目前为止全部回文日期

    文章目录 一.回文日期 二.提出任务 三.完成任务 (一)涉及知识点 1.time模块 2.datetime模块 3.timedelta模块 (二)实现步骤 1.编写源代码 2.运行程序,查看结果 3 ...

  4. Vijos P2010 回文日期【回文+日期计算】

    描述 在日常生活中,通过年.月.日这三个要素可以表示出一个唯一确定的日期. 牛牛习惯用8位数字表示一个日期,其中,前4位代表年份,接下来2位代表月份,最后2位代表日期.显然:一个日期只有一种表示方法, ...

  5. 【题解】【蓝桥杯】回文日期

    题目链接 回文日期 题目描述 解题思路 首先就是日期判断,注意这个地方是日期,而不是这之间的所有数据 例如44444444这种虽说是回文串,但是并不是日期,所以需要排除 判断回文串其实不用打表,因为真 ...

  6. 蓝桥杯(Java) 回文日期

    题目描述 2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日.因为如果将这个日期按 "yyyymmdd" 的格式写成一个 8 位数是 202002 ...

  7. 蓝桥杯--历届真题 回文日期【第十一届】【省赛】【B组】

    试题 历届真题 回文日期[第十一届][省赛][B组] 提交此题   评测记录 资源限制 时间限制:1.0s   内存限制:256.0MB  哎话说好久没写过日期题了,回忆起刚学的时候被日期统治的恐惧了

  8. 输出指定要求的回文日期与字符串拼接

    知识点:字符串拼接 (1)字符串直接用+拼接 演示直接用+连接两个字符串 这样会有三个内存单元来存放字符串,浪费内存空间,建议采用StringBuffer(线程安全)或者StringBuilder(线 ...

  9. 蓝桥杯 回文日期(Java)

    解题思路 1.首先要满足回文的形式,即ABCDDCBA,对于回文的判断用数组会方便许多. 2.ABABBABA型:此处也可以使用数组判断是否是回文型. 3.要满足日期的格式. 暴力求解思路:预先存储好 ...

  10. 蓝桥杯 历届试题 回文日期 C

    问题描述 2020年春节期间,有一个特殊的日期引起了大家的注意:2020年2月2日. 因为如果将这个日期按 yyyymmdd 的格式写成一个8位数是 20200202,恰好是一个回文数.我们称这样的日 ...

最新文章

  1. keepalived介绍和配置
  2. python3 限定方法参数 返回值 变量 类型
  3. 为什么 Java 不支持运算符重载?
  4. vue项目中使用echarts实现词云
  5. gj12-2 协程和异步io
  6. DirectXInput
  7. 用一句位运算判断两个整数的大小并返回较大者
  8. Qt5及模块架构分析
  9. sass 混入 (@mixin 与 @include的使用)
  10. Commons IO -- IOUtils
  11. springboot如何快速访问templates下的html
  12. 使用ADB卸载Android内置应用
  13. 远程桌面连接计算机是什么,远程桌面连接是什么意思?
  14. bitset和bitget
  15. MybatisPlus学习〖四〗报错篇 WARNWarn: Could not find @TableId in Class: com.fehead.OceanCode.dataobject
  16. vue-quill-editor富文本编辑器自定义上传图片功能
  17. Solaris培训第二章:OpenBoot PROM(转)
  18. 第十七届全国大学生智能汽车竞赛安徽赛区 暨安徽省第十五届大学生智能汽车竞赛 闭幕式致辞
  19. 从子弹短信到聊天宝,老罗靠什么挑战微信?
  20. windows修改ip地址

热门文章

  1. ResourceBundle使用详解
  2. firebug下载时出现there was an error loading firebug
  3. ISO 27001信息安全管理体系认证
  4. 怎么用计算机求logo,小学计算机教学中的LOGO语言教学(转载)
  5. 关于需求跟踪矩阵的6个问题
  6. CA/B论坛又出新动作了!代码签名证书最小密钥长度将于6月增强至3072位
  7. 0xc0150002(0xc0150002一键修复win10)
  8. Android 多媒体框架stagefright
  9. LoadRunner教程(22)-LoadRunner C语言脚本
  10. mysql 主键B+Tree 3层存2000W行数据