蓝桥杯 回文日期【第十一届】【省赛】【B组】Java (含详细注释)

在这里插入图片描述
在这里插入图片描述分析:这个题目有如下要求:

  1. 是否是合法日期
  2. 是否是回文数字
  3. 是否是ABABBABA类型的数字

代码如下:


import java.util.Scanner;

public class Main {
	public static void main(String[] args) {

		Scanner input = new Scanner(System.in);
		int inputYear = input.nextInt();
		int flag = 1;

		while (inputYear++ < 89991231) {
			//如果不是合法日期 进入下一次循环
			//如果是合法日期 判断是否是回文 和是否是ABAB BABA类型的日期
			
			if (!isTure(inputYear)) {
				continue;
				}else {
					//如果是回文并且flag为1时 输出下一个回文数 并将flag置为0,该if不再有输出
					if (isHuiWen(inputYear) && flag == 1  ) {
						System.out.println(inputYear);
						flag = 0;
					}
					//判断是否是ABAB BABA类型的日期 如果是则输出该数字 并退出循环
					if (isSecondType(inputYear) ) {
						System.out.println(inputYear);
						break;
			}
			

		}
		}
		input.close();
	}
//判断是不是ABAB BABA类型的函数
	public static boolean isSecondType(int inputYear1) {
		//先转换为字符串
		String str = String.valueOf(inputYear1);
		//比较字符串的各个位置是否满足ABAB BABA类型
		if (	str.charAt(0) == str.charAt(2) 
				&& str.charAt(5) == str.charAt(7) 
				&& str.charAt(0) == str.charAt(5)
				&& str.charAt(0) != str.charAt(1) 
				&& str.charAt(1) == str.charAt(3) 
				&& str.charAt(4) == str.charAt(6)
				&& str.charAt(4) == str.charAt(1)) {
			return true;
		}
		return false;
	}

	public static boolean isTure(int inputYear3) {
		//定义一个二维数组 第一个(run[0][])存放闰年每个月份的天数  第二个(run[1][])存放非闰年每个月份的天数
		//第一个元素为0 是因为 月份从1开始计数
		int[][] run = { { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
				{ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } };
		//先转换为字符串
		String s = String.valueOf(inputYear3);
		//得出年份
		int y = (s.charAt(0) - '0') * 1000 + (s.charAt(1) - '0') * 100 + (s.charAt(2) - '0') * 10 + (s.charAt(3) - '0');
		//得出月份
		int m = (s.charAt(4) - '0') * 10 + (s.charAt(5) - '0');
		//得出天数
		int d = (s.charAt(6) - '0') * 10 + (s.charAt(7) - '0');
		//如果月份超过12 返回false
		if (m > 12) {
			return false;}
		//判断是否是闰年 如果是闰年f=0 对应的run数组中的run[0][] 否则f=1 对应run[1][]
		int f = (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0) ? 0 : 1;
		//如果天数超过了每个月份对应的天数 返回false
		if (d > run[f][m])
			return false;
		return true;
	}
	//判断是否是回文的函数
	public static boolean isHuiWen(int inputYear2) {
		//先转换为字符串
		String str = String.valueOf(inputYear2);
		//转换为StringBuilder 方便使用reverse()方法
		final StringBuilder builder = new StringBuilder(str);
		//判断是否是回文
		if (builder.reverse().toString().equals(str)) {
			return true;
		}
		return false;
	}

}

运行结果:
在这里插入图片描述


版权声明:本文为sinat_51673411原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。