解题思路

1.首先要满足回文的形式,即ABCDDCBA,对于回文的判断用数组会方便许多。

2.ABABBABA型:此处也可以使用数组判断是否是回文型。

3.要满足日期的格式。

暴力求解思路:预先存储好各个月份的天数。需要三个判断方法:

a.判断是否是闰年,如果是,则将存储的二月份的天数改为29

b.判断是否是回文型

c.判断是否是ABAB型

通过三重for循环来寻找下一次回文日期。巧妙运用for循环的执行顺序就可以实现从当前日期往后开始寻找。先增加天数,天数满了增加月份,月份也满了增加年份。要注意增加月份和年份时对应地要初始化天数和月份。通过两个Boolean值来判断是否找到我们的目标日期,当两个Boolean值都为true时说明都找到了我们的目标日期,可以退出循环了。

代码

import java.util.*;
class Main{static boolean IsRun(int y) {if(y%400==0||(y%4==0&&y%100!=0)) return true;return false;}static boolean ABBA(String Str){//判断回文日期char []str=Str.toCharArray();if(str[0]==str[7]&&str[1]==str[6]&&str[2]==str[5]&&str[3]==str[4]) return true;return false;}static boolean ABAB(String Str) {//判断ABBA型char []str=Str.toCharArray();if(str[0]==str[2]&&str[2]==str[5]&&str[5]==str[7]&&str[1]==str[3]&&str[3]==str[4]&&str[4]==str[6]&&str[0]!=str[1]) return true;return false;}public static void main(String args[]) {int monthes[]={0,31,28,31,30,31,30,31,31,30,31,30,31};Scanner in=new Scanner(System.in);String time=in.next();Integer tt=Integer.parseInt(time);int year=tt/10000;int month=tt%10000/100;int day=tt%100+1;int n;int []ans=new int[2];boolean flag1=false,flag2=false;if(IsRun(year)) monthes[2]=29;for(int i=year;i<=9999;i++,month=1,day=1) {//巧妙运用for循环的顺序,可以实现从当前日期开始往后寻找for(int j=month;j<=12;j++,day=1) {for(int k=day;k<=monthes[j];k++) {n=i*10000+j*100+k;String Str=String.valueOf(n);if(ABBA(Str)&&flag1==false) {String str1=Str;flag1=true;ans[0]=n;}if(ABAB(Str)&&flag2==false) {String str2=Str;flag2=true;ans[1]=n;}if(flag1==true&&flag2==true) break;}}}System.out.println(ans[0]);System.out.println(ans[1]);}
}

总结反思

第一遍自己做的时候,想得过于复杂了,既要考虑是否符合日期,又要考虑若不符合下一次应该为哪个,没有想过直接暴力求解,循环增加时间来判断寻找目标日期,思路不清楚,虽然最后过了,但是逻辑很混乱,自己也是懵里懵懂的过的。

通过这道题加深我我对回文的认识,起初我对回文的判断是将年份切割为一位位int型数值然后比较,通过去网上寻找其他题解我了解了还可以用更简单的数组来判断回文,也感觉到了循环是寻找回文的一种比较简单明了的思路。

以下是第一遍做题的代码:(属于自己都不想看系列)

import java.util.*;
class Main{static boolean legal(Integer y,Integer rem,Integer red) {if(rem>0&&rem<=12) {if(rem==1||rem==3||rem==5||rem==7||rem==8||rem==10||rem==12) {if(red>0&&red<=31) return true; }if(rem==4||rem==6||rem==9||rem==11) {if(red>0&&red<=30) return true;}if(rem==2) {if((y%4==0&&y%100!=0)||y%400==0) {if(red>0&&red<=29) return true;}else if(red>0&&red<=28) return true;  }}return false;}public static void main(String args[]) {Scanner in=new Scanner(System.in);String str=in.nextLine();//结束键为EnterInteger y=Integer.parseInt(str.substring(0, 4));//年Integer m=Integer.parseInt(str.substring(4, 6));//月Integer d=Integer.parseInt(str.substring(6,8));//日StringBuffer year=new StringBuffer(str.substring(0,4));StringBuffer ystr=new StringBuffer(year);ystr=ystr.reverse();year.append(ystr);Integer rem=Integer.parseInt(ystr.substring(0,2));Integer red=Integer.parseInt(ystr.substring(2,4));Integer yd=Integer.parseInt(str.substring(0,2));Integer ym=Integer.parseInt(str.substring(2,4));if(legal(y,rem,red)==true) {if(m<rem) System.out.println(year);if(m>=rem) {if(d<red) System.out.println(year);}}else {
//      String str1=str.substring(0,4);//年份
//      Integer mon=Integer.parseInt(str.substring(4,6));
//      Integer day=Integer.parseInt(str.substring(6,8));
//      StringBuffer reyear=new StringBuffer(str1);
//      reyear=reyear.reverse();
//      Integer rem=Integer.parseInt(str1.substring(0,2));
//      Integer red=Integer.parseInt(str1.substring(2,4));StringBuffer cs;StringBuffer csc;//回文日期Integer d0=yd,m0=ym;
//  System.out.println("d0:"+d0+" m0:"+m0);if(red>31) {if(d0/10==9) d=1;if(d0/10==1) {if(d0<13) d0=d0+1;else d0=d0/10*10+10;}else if(d0%10<2) d0=d0+1;else d0=d0/10*10+10;m0=1;}else {if(m0==0||m0>=90) {m0=1;}else if(m0==20) m0=21;else m0=m0/10*10+10;}if(d0==1) csc=new StringBuffer("01");else csc=new StringBuffer(d0.toString());if(m0==1) csc=csc.append("01");else csc=csc.append(m0.toString());cs=new StringBuffer(csc);cs=cs.reverse();csc.append(cs);System.out.println(csc);}//ABABBABAif(yd%10==0&&ym%10==0&&((m<ym)||(m==ym&&d<yd))) {System.out.println(year);}else {Integer a=yd/10*10;if(yd%10!=0||(yd%10==0&&ym>=yd)) {if(a==20) {a=21;}a=a+10;}String s1=a.toString()+a.toString();StringBuffer AB=new StringBuffer(s1);AB=AB.reverse();System.out.println(s1+AB);}}
}

蓝桥杯 回文日期(Java)相关推荐

  1. 蓝桥杯 回文日期【第十一届】

    以为没有任何技巧,看了大佬的代码才知道是有的..不过这题数据很小也无所谓了. 大佬思路:直接枚举年份 a,将其翻转得到 b,那么 a + b 就是一个回文数. #include <iostrea ...

  2. 蓝桥杯 回文素数 Java

    回文素数 10301是个5位的素数.它有个特点,把数字倒过来还是它本身,具有这样特征的素数,我们称之为:回文素数. 10501 10601 11311 这些都是5位的回文素数. 请你计算一下,像这样的 ...

  3. 蓝桥杯-回文数(java)

    基础练习 回文数 时间限制:1.0s 内存限制:512.0MB问题描述1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数.输出格式按从小到大的顺序输出满足条件的四位 ...

  4. 466. 回文日期 Java题解 (模拟)

    输入样例: 20110101 20111231 输出样例: 1 解题思路: 找两个日期中间合法的回文数,一种直接的想法是:枚举这两个日期中间的所有日期,但在枚举时,需要考虑给出的两个日期是否在同一年, ...

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

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

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

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

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

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

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

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

  9. 2020蓝桥杯真题回文日期 C语言/C++

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

最新文章

  1. vscode中使用js的console配置 - mac
  2. 我的世界java版forge放在哪_我的世界1.9forge安装 怎么装forge教程
  3. 分布式服务追踪与调用链系统
  4. 5年博龄只有十几篇文章,惭愧呀
  5. 有奶瓶的linux系统,用U盘启动BEINI(奶瓶)系统
  6. ELK6.0部署:Elasticsearch+Logstash+Kibana搭建分布式日志平台
  7. vc6.0垃圾文件清理工具_C盘空间爆满,详细清理方法介绍
  8. javascript自定义滚动条插件,几行代码的事儿
  9. 工业机器人技术试题_《工业机器人技术基础》课程试卷A卷 参考答案
  10. 初步使用计算机教学案列,信息技术与学科教学整合教学案例
  11. mysql api百度云盘_利用百度云盘API上传文件至百度云盘
  12. 布线问题_分支限界法
  13. GUI 尚学堂马士兵视频上留的作业,自己改出来的
  14. 直连路由的配置-思科模拟器练习(Cisco Packet Tracer)
  15. 数控编程也是c语言吗,学数控编程需要使用个人电脑吗
  16. Windows 10快捷键入门(会更新)
  17. 用幂法和反幂法分别计算矩阵按模最大和按模最小的特征值及其特征向量
  18. 纯css3圆柱模板立体图
  19. Spring之AOP系列--指示器
  20. CyclicBarrier 是什么?怎么用?

热门文章

  1. 编译内核 解决 Gentoo 在 AUSU P5B SE 板载网卡 无法上网
  2. rock带你读CornerNet-lite系列源码(二)
  3. Vert.x ——概述
  4. 内网接入外网的几种方式
  5. nginx全天候监测大流量可疑ip的封禁脚本
  6. docker个人容器云(基于阿里云)
  7. openFoam+paraview 显示网格cellID
  8. 矩阵的三角分解(LU分解)
  9. 用幂法和反幂法分别计算矩阵按模最大和按模最小的特征值及其特征向量
  10. HTTP 有哪些方法?