解题思路: 将输入数据进行格式化后,利用双指针寻找回文日期,再在已找到的回文日期基础上判断其是否满足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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复