流星也为你落下


私信TA

用户名:dotcpp0796798

访问量:28

签 名:

我会意气风发

等  级
排  名 5938
经  验 1459
参赛次数 0
文章发表 12
年  龄 20
在职情况 学生
学  校 江西理工大学
专  业 软件工程

  自我简介:

解题思路:   将输入数据进行格式化后,利用双指针寻找回文日期,再在已找到的回文日期基础上判断其是否满足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 人评分

  评论区

  • «
  • »