解题思路: 将输入数据进行格式化后,利用双指针寻找回文日期,再在已找到的回文日期基础上判断其是否满足ABABBABA型日期
注意事项: 1.在循环寻找回文日期时,注意要不断更新调用进行日期加一操作的对象
2.寻找ABABBABA型日期时,可以调用寻找回文日期方法,节省时间
参考代码:
import java.util.Scanner; import java.time.LocalDate; import java.time.format.DateTimeFormatter; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //创建一个日期格式化器 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd"); //解析字符串为LocalDate LocalDate date = LocalDate.parse(scanner.next(), dateTimeFormatter); //寻找回文字符 LocalDate huiWenDate = FindNextHuiWenDate(dateTimeFormatter, date); System.out.println(huiWenDate.format(dateTimeFormatter)); //格式化输出 FindNext_ABABBABA_Date(dateTimeFormatter,date); } //寻找下一个ABABBABA 型的回文日期 public static void FindNext_ABABBABA_Date(DateTimeFormatter dtf, LocalDate localDate) { //首先,它肯定是一个回文日期 LocalDate newLocalDate = localDate; while (true) { LocalDate findNextHuiWenDate = FindNextHuiWenDate(dtf, newLocalDate);//先去找满足条件的回文日期 newLocalDate = findNextHuiWenDate; //重新赋值,方便下一次寻找回文日期 String formatted = findNextHuiWenDate.format(dtf); //格式化 //进行判断 //满足AB if (formatted.charAt(0) != formatted.charAt(1)) { //满足ABABBABA if (formatted.charAt(0) == formatted.charAt(2) && formatted.charAt(2) == formatted.charAt(5) && formatted.charAt(5) == formatted.charAt(7) && formatted.charAt(1) == formatted.charAt(3) && formatted.charAt(3) == formatted.charAt(4) && formatted.charAt(4) == formatted.charAt(6)){ System.out.println(formatted); //输出 break; } } } } //寻找下一个回文日期 public static LocalDate FindNextHuiWenDate(DateTimeFormatter dtf, LocalDate localDate) { //避免修改主函数中地localDate的日期 LocalDate newLocalDate = localDate; while (true){ //从当前开始不断地向后加一天 LocalDate newDate = newLocalDate.plusDays(1); newLocalDate = newDate; //对新日期进行格式化 String formattedNewDate = newDate.format(dtf); //两个指针从两段开始向中间遍历 int start = 0, end = formattedNewDate.length() - 1; boolean flag = true; // 假设这个日期是回文日期 while (start <= end) { if (formattedNewDate.charAt(start) != formattedNewDate.charAt(end)) { flag = false; break; } //继续比较 start++; end--; } //循环结束,如果这个是回文日期,并跳出循环 if (flag) { break; } } //返回回文日期 return newLocalDate; } }
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复