暴力求解?也可能是日期判断
看到题之后凭着自己的感觉写了一下居然过了……开心开心。
对于题目要求的数有两种情况:
第一种是ABCDDCBA
第二种是ABABBABA
所以只要确定了年份,就决定了整个串的序列,从输入的年份开始,一直向下遍历,然后再判断是否是合法日期以及是否是比输入年份大的日期。
关于确定合法年份:往年的题里面有一个日期问题,里面也涉及到了判断日期合法性,所以我感觉这个还是比较重要的,多写几次加深一下印象。
1 import java.util.Scanner; 2 3 public class Main { 4 public static String n; 5 public static int N; 6 7 // 将字符转化为数字 8 public static int to(char c) { 9 return (int) (c - '0'); 10 } 11 12 public static void main(String args[]) { 13 Scanner in = new Scanner(System.in); 14 n = in.next(); 15 N = Integer.parseInt(n); // 存储输入的值 16 boolean f1 = false, f2 = false; 17 int a = Integer.parseInt(n.substring(0, 4));// ABCD 18 int b = Integer.parseInt(n.substring(0, 2));// AB 19 int q1 = 0, q2 = 0; // q1,q2分别为答案1和答案2 20 while (true) { 21 if (!f1) { 22 // System.out.println("a=" + a); 23 String t = "" + a; 24 char c[] = t.toCharArray(); 25 q1 = a * 10000 + to(c[3]) * 1000 + to(c[2]) * 100 + to(c[1]) * 10 + to(c[0]); 26 if (check(q1)) { 27 f1 = true; 28 } else 29 a++; 30 } 31 if (!f2) { 32 int x = b / 10; 33 int y = b % 10; 34 q2 = b * 1000000 + x * 100000 + y * 10000 + y * 1000 + x * 100 + y * 10 + x; 35 if (check(q2)) { 36 f2 = true; 37 } else 38 b++; 39 } 40 if (f1 && f2) { 41 System.out.println(q1); 42 System.out.println(q2); 43 return; 44 } 45 46 } 47 48 } 49 50 // 检查合法年份 51 public static boolean check(int a) { 52 if (a <= N) 53 return false; 54 int day = a % 100; 55 int mon = (a / 100) % 100; 56 int year = a / 10000; 57 if (day < 1 || day > 31) 58 return false; 59 if (mon < 1 || mon > 12) 60 return false; 61 if (isrun(year) && day == 2 && day > 29) 62 return false; 63 if (mon == 2 && day > 28) 64 return false; 65 if ((mon == 4 || mon == 6 || mon == 9 || mon == 11) && day > 30) 66 return false; 67 return true; 68 } 69 70 // 判断是否是闰年 71 public static boolean isrun(int y) { 72 return (y % 400 == 0) || (y % 4 == 0 && y % 100 != 0); 73 } 74 }