Java教程

蓝桥杯真题 回文日期

本文主要是介绍蓝桥杯真题 回文日期,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

问题描述

 

 

考点

暴力求解?也可能是日期判断

思路

看到题之后凭着自己的感觉写了一下居然过了……开心开心。

对于题目要求的数有两种情况:

第一种是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 }

 

这篇关于蓝桥杯真题 回文日期的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!