2017蓝桥杯省赛---java---B---7(日期问题)

题目描述

日期问题

标题:日期问题

小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在196011日至20591231日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年//日的,有采用月//年的,还有采用日//年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。

比如02/03/04,可能是20020304日、20040203日或20040302日。

给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?

输入
----
一个日期,格式是"AA/BB/CC"(0 <= A, B, C <= 9)  

输入
----
输出若干个不相同的日期,每个日期一行,格式是"yyyy-MM-dd"。多个日期按从早到晚排列。  

样例输入
----
02/03/04  

样例输出
----
2002-03-04  
2004-02-03  
2004-03-02  

资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗  < 1000ms


请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
不要使用package语句。不要使用jdk1.7及以上版本的特性。
主类的名字必须是:Main,否则按无效代码处理。
————————————————
版权声明:本文为CSDN博主「公众号-放生改命」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44949135/article/details/108143554

代码实现

package com.atguigu.TEST;


import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;

class Main{
    public static boolean isLeap(int year){
        return (year%4==0&&year%100!=0)||year%400==0;
    }

    public static String f(int a,int b,int c){
        if(a>=0&&a<=59){ a+=2000;}
        else if (a>=60&&a<=99){ a+=1900;}
        else return "";

        if(b<1||b>12) return "";
        if(c<1||c>31) return "";

        boolean _isLeap=isLeap(a);
        switch (b){//日期校验
            case 2:if(_isLeap&&c>29) return "";
            if(!_isLeap&&c>28) return "";
            break;
            case 4:if(c>30) return "";
            break;
            case 6:if(c>30) return "";
                break;
            case 9:if(c>30) return "";
                break;
            case 11:if(c>30) return "";
                break;
            default:
                break;
        }

        String _a,_b,_c;
        _a=a+"";
        _b=b+"";
        _c=c+"";
        if(_b.length()==1)
            _b="0"+_b;
        if(_c.length()==1)
            _c="0"+_c;

        return _a+"-"+_b+"-"+_c;

    }


    public static void main(String[] args) {
        String in;
        Scanner scanner = new Scanner(System.in);
        in=scanner.next();
        int a=(in.charAt(0)-'0')*10+(in.charAt(1)-'0');
        int b=(in.charAt(3)-'0')*10+(in.charAt(4)-'0');
        int c=(in.charAt(6)-'0')*10+(in.charAt(7)-'0');
        String case1=f(a,b,c);
        String case2=f(c,a,b);
        String case3=f(c,b,a);
        //tree带去重和排序功能
        Set<String> ans = new TreeSet<>();
        if(case1!="")  ans.add(case1);
        if(case2!="")  ans.add(case2);
        if(case3!="")  ans.add(case3);
        for(String set:ans) {
            System.out.println(set);

        }

    }


}










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Frank---7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值