传送门

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. 2009-ISIS命令与配置实验手册(可下载)
  2. 特别实用的 6 款 Python 特殊文本格式处理库推荐
  3. 微信小程序开发工具中快捷键
  4. oracle 统计分析 dic,数据库优化之统计分析实战篇
  5. java修改pdf内容流_java – 在PDFBox中,如何更改PDRectangle对象的原点(0,0)?
  6. Spring.NET 中的 ADO.NET 数据访问的示例
  7. select下拉框带模糊查询_如何实现参数级联查询
  8. ORACLE锁的管理
  9. 如何通过修改注册表来限定Win10 PIN的最小位数
  10. lduan server 2012 RMS 群集安装 上(十四)
  11. 并行学习框架下基于GAN的城市道路网短时路段交通预测方法
  12. 2018中南大学 计算机考研分数,中南大学2018年硕士研究生招生复试基本分数线
  13. 电脑php的基本方法是什么,做文员的基本电脑操作是什么
  14. 2022年MySQL最新面试题
  15. pg_regress 使用技巧
  16. 华为设备ARP配置命令
  17. 结构力学计算机矩阵位移法,结构力学-矩阵位移法.ppt
  18. 微信小程序实现顶部导航栏渐变
  19. 拉普拉斯金字塔分解及图像融合
  20. 新手如何组装一台电脑

热门文章

  1. SSL证书使用的端口号通常默认是多少
  2. 【UML】交互图——时序图
  3. 亚马逊运营人才必懂:亚马逊搜索词和关键词
  4. 蓝牙Mesh学习总结一(蓝牙Mesh介绍)
  5. H5与小程序技术方案比较
  6. 七牛云自定义域名配置阿里云SSL证书
  7. adb logcat 过滤关键词 抓取日志
  8. 关于H3C和华为Wvrp系列模拟器的一些经验
  9. kafka consumer assign 和 subscribe模式差异分析
  10. fetchall()