解题思路: 将输入数据进行格式化后,利用双指针寻找回文日期,再在已找到的回文日期基础上判断其是否满足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分
2 人评分
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:689 |
字符串输入输出函数 (C++代码)(都当成字符串吧hhhhhhhh)浏览:508 |
弟弟的作业 (C++代码)浏览:1342 |
简单的a+b (C++语言代码)浏览:895 |
字符串问题 (C语言代码)浏览:1634 |
最长单词 (C语言代码)浏览:1471 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:485 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:548 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:638 |
【蟠桃记】 (C语言代码)浏览:1084 |