传送门

https://www.cnblogs.com/violet-acmer/p/9859003.html

题解:

 思路1:

  相关变量解释:

    year1,month1,day1 : date1对应的年、月、日

    year2,month2,day2 : date2对应的年、月、日

  这道题算是考思维+Code能力??

  易得,每一年最多有一个回文日期;

  例如 2000 的回文日期为 2000 0002

  for i : year1 to year2

    找到每个 i 的回文日期对应的月(month)、日(day),并进行两个判断

    (1):判断month,day是否合法。

    (2):判断当前日期是否在date1与date2之间

 思路2.

  枚举月和日对应的回文年份,看其回文组成的八位数是否在date1和date2内,什么意思呢?

  例如,对于01月23日,其对应的回文年份为3210,其回文组成的八位数为 32100123,在和输入的date1与date2比较,看是否在其中,如果在,Count++;

  不用特判某一年是否为闰年,为什么呢?

  某年是否为闰年只会影响 2 月的天数,2月最多有 29 天,其对应的回文年份为 9220,但9220是闰年。

  思路2来自集训队队员博客:https://blog.csdn.net/QLU_minoz/article/details/83450635

AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define isSat(x) ((x) >= 1 &&(x) <= 12)//判断是否为合法的月份
 4 #define isRun(x) ((x%4 == 0 && x%100 != 0) || (x%400 == 0))//判断是否为闰年
 5
 6 char data[2][8];
 7 int monthDay[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31}, //0 : 平年
 8                      {0,31,29,31,30,31,30,31,31,30,31,30,31}};//1 : 闰年
 9
10 int Transform(int a,int b,int d){//将字符串对应的年、月、日转化成数子
11     int num=0;
12     for(int i=a;i <= b;++i)
13         num=num*10+(data[d][i]-'0');
14     return num;
15 }
16 void Search(int year,char *s){
17     int index=0;
18     do
19     {
20         s[index++]=year%10+'0';
21         year /= 10;
22     }while(year != 0);
23 }
24 void Solve()
25 {
26     int year1=Transform(0,3,0),month1=Transform(4,5,0),day1=Transform(6,7,0);
27     int year2=Transform(0,3,1),month2=Transform(4,5,1),day2=Transform(6,7,1);
28     int res=0;
29     int pre=0;
30     for(int i=year1;i <= year2;++i)
31     {
32         char s[4];
33         Search(i,s);//找到将当前的年份的回文
34         int month=(s[0]-'0')*10+(s[1]-'0');//当前年份的回文对应的月
35         int day=(s[2]-'0')*10+(s[3]-'0');//日
36         if(!isSat(month) || day > monthDay[isRun(i)][month])
37             continue;
38         if(year1 == year2)
39         {
40             if(month > month1 || (month == month1 && day >= day1))
41             {
42                 if(month < month2 || (month == month2 && day <= day2))
43                     res++;
44             }
45         }
46         else
47         {
48             if(i == year1)
49                 res += (month > month1 || (month == month1 && day >= day1) ? 1:0);
50             else if(i == year2)
51                 res += (month < month2 || (month == month2 && day <= day2) ? 1:0);
52             else//如果year1 != year2 ,且 i != year1 && i != year2 ,则当前合法的日期一定在date1和date2之间
53                 res++;
54         }
55     }
56     printf("%d\n",res);
57 }
58 int main()
59 {
60     scanf("%s%s",data[0],data[1]);
61     Solve();
62 }

思路1

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int date1,date2;
 4 int monthDay[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
 5
 6 void Solve()
 7 {
 8     int res=0;
 9     for(int i=1;i <= 12;++i)//枚举月份
10         for(int j=1;j <= monthDay[i];++j)//枚举每月对应的日
11         {
12             int year=j%10*1000+j/10*100+i%10*10+i/10;//当前月,日对应的回文年份
13             int cnt=year*10000+i*100+j;//回文日期对应的八位数
14             res += (cnt >= date1 && cnt <= date2 ? 1:0);
15         }
16     printf("%d\n",res);
17 }
18 int main()
19 {
20     scanf("%d%d",&date1,&date2);
21     Solve();
22 }

思路2

转载于:https://www.cnblogs.com/violet-acmer/p/9860164.html

NOIP 普及组 2016 回文日期相关推荐

  1. 【NOIP普及组2016】魔法阵

    @魔法阵@ @前言@ @题目描述@ @题目分析-暴力枚举O(m^4)@ @开始优化-桶思想优化O(n^3)@ @高端操作-学不来的数学分析O(n^2)@ @END@ @前言@ 听闻老前辈们道这道题好像 ...

  2. NOIP普及组历届真题(1997~2018)

    供大家刷题. 先上快捷的查看方式:NOIP普及组历届真题 第二页 来自洛谷--一个很好的刷题网站 剩下是具体题目和难度以及是第几年的题. P1002 过河卒 NOIp普及组 2002 普及- P100 ...

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

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

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

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

  5. NOIP普及组历年题目

    文章目录 2003 413. 乒乓球 414. 数字游戏 415. 栈 416. 麦森数 2004 417. 不高兴的津津 418. 花生采摘 419. FBI树 420. 火星人 2005 421. ...

  6. 历年CSP-J(NOIP普及组)分类汇总目录

    内容持续更新中... ... [2022CSPJ普及组]T1.乘方                    数学问题 [2022CSPJ普及组]T2.解密                    数学问题 ...

  7. CSP-J (NOIP普及组) 历年复赛真题考察内容(1998~2021)

    TZOJ题目分类 本博客原文地址:https://www.cnblogs.com/BobHuang/p/14522022.html 其中,1.较简单题26题左右:2.动态规划17题,其中9题较好做:3 ...

  8. CSP-J复赛复习题目(NOIP普及组2000-2011)

    CSP-J复赛复习题目(NOIP普及组2000-2011) NOIP普及组复赛(某个不存在的比赛)2000-2011年的题面和样例 可以用来复习CSP-J 建议去OJ上查看并提交 祝大家CSP RP+ ...

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

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

最新文章

  1. 【完整可运行源码+GIF动画演示】十大经典排序算法系列——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序
  2. Acwing -- 单调队列优化的DP问题
  3. mui刷新不显示动画_144Hz刷新率和60Hz有啥区别?体验有何不同?这里全告诉你
  4. DM 源码阅读系列文章(四)dump/load 全量同步的实现
  5. Ubuntu系统lamp环境下安装wordpress、zencert和mangento程序网站
  6. 1489 数据结构:矩阵鞍点
  7. 计算机组成原理收获与心得,学习计算机组成原理心得体会
  8. 购买计算机键盘,键盘安装步骤是怎样的 怎样选购电脑键盘
  9. arcgis两点之间连线_three3D地图设置两点之间的连线
  10. 中软防水坝 怎么卸载_卸载中软防水墙软件
  11. webrtc视频卡顿分析一本地视频卡顿
  12. python识别验证码 免费API接口
  13. 安装oculus运行时出现问题_安装软件时出现解析包出现问题是什么原因
  14. java中各种加密算法的实践应用
  15. Error: This attribute must be localized. 解决方法
  16. 3DsMax —布尔制作口红
  17. Win10系统双硬盘安装Ubuntu18.04心得
  18. 你需要知道的8种数据结构
  19. Android实现全景图
  20. SQL Server数据库技术文档

热门文章

  1. 转战C++了,讲讲基本框架。
  2. 企业架构建模工具:Archi中文介绍
  3. Android 判断车牌照的格式是否正确
  4. 相同点安卓和iosui的相同点_UI设计中IOS和安卓的设计差异
  5. ESP8266实现网页交互
  6. HTML与HTML5常用标签
  7. 【2023版】基于部标JT808JT1078车载视频位置监控平台介绍-开源项目
  8. 搭建windows服务器基本步骤
  9. 小程序入门案例某大妈sign
  10. 网络互联(IPv6技术)