蓝桥杯2020年真题演练——7、回文日期(JavaA组)

上一题:蓝桥杯2020年真题演练——6、成绩分析(JavaA组)

题目描述

在这里插入图片描述

解析

⭐⭐依次从输入的日期开始遍历直到99999999(8个9),当然既然已知这串数字代表日期,那么遍历到99991231就可以了,日期最大就是1231嘛,不过这些都是些无关紧要的,影响不大,不需要把精力放到这里。对每一个遍历对象首先检查其日期合法性,如果它是一个日期,再进一步检查它是否是回文日期,是否是ABABBABA日期。
注意:我们在遍历的时候要从输入日期的下一个日期开始(因为题目要求的是下一个回文日期
⭐⭐代码中频繁用到了“%”和“/”,它们分别是取余操作和除法操作,由他俩配合使用可以获取一个整数某位或某几位上的数字。
🌙关于检查日期合法性:要注意不同月份,天数不一样,还要考虑闰年2月的天数是29
🌙检查日期通过后直接取出各位上的数字进行比对,判断其是否是回文日期,若是则输出,输出后进一步判断是否是ABABBABA日期。这里有一个要注意的是,当再次检查到回文日期时,不需要再输出,所以要有一个flag来标识回文日期是否已经输出过了。

代码解析

public class Main {
    public static void main(String[] args) {
        boolean flag=false;//标记是否已经输出回文日期
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        for (int i = n + 1; i < 99991231; i++) {
            if (!check(i)) {
                continue;
            }
            //检查是否是回文
            if(i/10000000 ==i%10&&i/1000000%10==i/10%10&&i/100000%10==i/100%10&&i/10000%10==i/1000%10){
                if(!flag){
                    System.out.println(i);
                    flag=true;
                }
                //检查该回文是否符合ABABBABA
                int A=i/10000000;
                int B=i/1000000%10;
                if(A!=B&&i/100000%10==A&&i/10000%10==B&&i/1000%10==B&&i/100%10==A&&i/10%10==B&&i%10==A){
                    System.out.println(i);
                    break;
                }
            }
        }
    }

    //检查日期合法性
    public static boolean check(int x) {
        int year = x / 10000;
        int month = x / 100 % 100;
        int date = x % 100;
        int DATE = 31;
        if (month == 4 || month == 6 || month == 9 || month == 11) {
            DATE = 30;
        } else if (month == 2) {
            if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
                DATE = 29;
            } else {
                DATE = 28;
            }
        }
        boolean flag = true;
        if (month < 1 || month > 12) {
            flag = false;
        } else if (date < 1 || date > DATE) {
            flag = false;
        }
        return flag;
    }
}

蓝桥杯2020年真题演练——8、字串分值(JavaA组)
在这里插入图片描述

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值