第十一届蓝桥杯A组省赛试题 G: 回文日期(Java)

简介: 第十一届蓝桥杯A组省赛试题 G: 回文日期(Java)

试题 G: 回文日期

时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分


【问题描述】

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


有人表示 20200202 是“千年一遇”的特殊日子。对此小明很不认同,因为不到2年之后就是下一个回文日期:20211202 即2021年12月2日。


也有人表示 20200202 并不仅仅是一个回文日期,还是一个 ABABBABA 型的回文日期。对此小明也不认同,因为大约 100 年后就能遇到下一个 ABABBABA 型的回文日期:21211212 即2121年12月12日。算不上“千年一遇”,顶多算“千年两遇”。


给定一个8位数的日期,请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。


【输入格式】

输入包含一个八位整数 ,表示日期。


【输出格式】

输出两行,每行1个八位数。

第一行表示下一个回文日期,第二行表示下一个 型的回文日期。


【样例输入】

20200202


【样例输出】

20211202

21211212


【评测用例规模与约定】

对于所有评测用例,10000101<=N<=89991231, 保证 N 是一个合法日期的 8 位数表示。


【思路】

需要判断是否是闰年,是否是回文日期,是否是ABAB型回文日期,然后就是暴力。


【Java代码】


import java.util.Scanner;
public class Main {
  //判断是否是闰年
  static boolean isLeap(int year) {
  if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) return true;
  return false;
  }
  //判断是否是回文日期
  static boolean isHui(String string) {
  if (string.charAt(0) == string.charAt(7) && string.charAt(1) == string.charAt(6) && string.charAt(2) == string.charAt(5) && string.charAt(3) == string.charAt(4)) return true;
  return false;
  }
  //判断是否是ABAB型回文日期
  static boolean isABAB(String string) {
  if (isHui(string) && string.charAt(0) == string.charAt(2) && string.charAt(1) == string.charAt(3)) return true;
  return false;
  }
  public static void main(String[] args) {
  Scanner scanner = new Scanner(System.in);
  int[] dayTotal = {0,31,28,30,31,30,31,30,31,30,31,30,31}; //每月多少天
  int input = scanner.nextInt();
  int year = input / 10000;
  int mouth = input % 10000 / 100;
  int day = input % 100 + 1; //加一是为了下面循环里面从下一天开始判断(即当天+1)
  if (isLeap(year)) {
    dayTotal[2] = 29; //闰年2月有29天
  }
  int res[] = new int[2]; //用来记录符合结果的两个回文日期
  boolean flag1 = false, flag2 = false; //用来标志是否找到需要的回文日期
label1: for (int i = year; i <= 9999; i++, mouth = 1, day = 1) {
    for (int j = mouth; j <= 12; j++, day = 1) {
    for (int k = day; k <= dayTotal[j]; k++) {
      int string = i*10000 + j*100 + k;
      if (isHui(string + "") && flag1 == false) {
      flag1 = true;
      res[0] = string;
      }
      if (isABAB(string + "") && flag2 == false) {
      flag2 = true;
      res[1] = string;
      }
      if (flag1 == true && flag2 == true) {
      break label1; //两个都找到就可以结束了
      }
    }
    }
  }
  System.out.println(res[0]);
  System.out.println(res[1]);
  }
}


相关文章
蓝桥杯真题time模块详解 | 顺子日期 星期一
蓝桥杯真题time模块详解 | 顺子日期 星期一
|
算法 搜索推荐 Java
【潜意识Java】深度解析黑马项目《苍穹外卖》与蓝桥杯算法的结合问题
本文探讨了如何将算法学习与实际项目相结合,以提升编程竞赛中的解题能力。通过《苍穹外卖》项目,介绍了订单配送路径规划(基于动态规划解决旅行商问题)和商品推荐系统(基于贪心算法)。这些实例不仅展示了算法在实际业务中的应用,还帮助读者更好地准备蓝桥杯等编程竞赛。结合具体代码实现和解析,文章详细说明了如何运用算法优化项目功能,提高解决问题的能力。
816 6
|
算法 Java C++
【潜意识Java】蓝桥杯算法有关的动态规划求解背包问题
本文介绍了经典的0/1背包问题及其动态规划解法。
602 5
|
机器学习/深度学习 算法 关系型数据库
第十五届蓝桥杯C++B组省赛
第十五届蓝桥杯C++B组省赛
613 14
|
算法 C++
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
553 5
|
人工智能 Python
蓝桥杯练习题(四):Python组之历届试题三十题
关于蓝桥杯Python组历届试题的三十个练习题的总结,包括题目描述、输入输出格式、样例输入输出以及部分题目的解题思路和代码实现。
783 0
蓝桥杯练习题(四):Python组之历届试题三十题
|
Java
2023届蓝桥杯大赛软件类国赛Java大学B组 互质 数论
2023届蓝桥杯大赛软件类国赛Java大学B组 互质 数论
287 1
|
存储 前端开发 算法
2016届蓝桥杯大赛软件类国赛Java大学B组 反幻方 暴力搜索
2016届蓝桥杯大赛软件类国赛Java大学B组 反幻方 暴力搜索
266 0
|
人工智能 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
330 0
|
Java C语言 C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1000 kAc给糖果你吃
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1000 kAc给糖果你吃
282 0