蓝桥杯-回文日期
问题描述 2020年春节期间,有一个特殊的日期引起了大家的注意:2020年2月2日。因为如果将这个日期按 yyyymmdd 的格式写成一个8位数是 ,恰好是一个回文数。我们称这样的日期是回文日期。 有人表示 20200202 是“千年一遇”的特殊日子。对此小明很不认同,因为不到2年之后就是下一个回文日期:即2021年12月2日。 也有人表示 20200202并不仅仅是一个回文日期,还是一个 ABABBABA型的回文日期。对此小明也不认同,因为大约 100 年后就能遇到下一个 型的回文日期:即2121年12月12日。算不上“千年一遇”,顶多算“千年两遇”。 给定一个8位数的日期,请你计算该日期之后下一个回文日期和下一个ABABBABA型的回文日期各是哪一天。 输入格式 输入包含一个八位整数 ,表示日期。 输出格式 输出两行,每行1个八位数。 第一行表示下一个回文日期,第二行表示下一个 型的回文日期。 样例输入 20200202 样例输出 20211202 21211212 import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String da = sc.next(); // 20200202 DateFormat bf = new SimpleDateFormat("yyyyMMdd"); Date indate = null; try { indate = bf.parse(da); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } boolean a,b; a = false; b = false; while(!(a&&b)) { indate.setTime(indate.getTime()+24*3600*1000); String aa = bf.format(indate); if(isnormal(aa)&&!a) { System.out.println(aa); a = true; } if(isSpecial(aa)&&!b) { b = true; System.out.println(aa); } } } private static boolean isnormal(String ss) { char[] t = ss.toCharArray(); for (int i = 0; i < 4; i++) { if(t[i]!=t[8-i-1]) return false; } return true; } private static boolean isSpecial(String ss) { char[] t = ss.toCharArray(); for (int i = 0; i < 4; i++) { if(t[i]!=t[8-i-1]) return false; } if(t[0]==t[2]&&t[1]==t[3]) return true; return false; } }