zoukankan      html  css  js  c++  java
  • Java实现蓝桥杯日期问题

    历届试题 日期问题
    时间限制:1.0s 内存限制:256.0MB
    提交此题
    问题描述
      小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。

    比如02/03/04,可能是2002年03月04日、2004年02月03日或2004年03月02日。

    给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?
    输入格式
      一个日期,格式是"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

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

    注意:
      main函数需要返回0;
      只使用ANSI C/ANSI C++ 标准;
      不要调用依赖于编译环境或操作系统的特殊函数。
      所有依赖的函数必须明确地在源文件中 #include
      不能通过工程设置而省略常用头文件。

    提交程序时,注意选择所期望的语言类型和编译器类型。


    1、闰年和平年的判断
    2、对月日满足条件的判断
    3、对日期判重,相同的日期只能输出一个
    4、要对结果进行从早到晚排序
    5、在输入时如何保证前导0的输出,如2002-03-02,而不是输出2002-3-2.
    注:用字符串来保证前导0的存在,用Treeset来进行日期的自动判重和排序会比较容易。

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    import java.util.TreeSet;
    
    
    public class 日期问题 {
    	 public static TreeSet<Integer>  set = new TreeSet<Integer>();  
    	    public static List<Integer> list =new ArrayList<Integer>();  
    	    public static void f(String year,String mon,String day)  
    	    {  
    	        int y = Integer.parseInt(year);  
    	        int m = Integer.parseInt(mon);  
    	        int d = Integer.parseInt(day);  
    	        if(y<=59)  
    	        {  
    	            y+=2000;  
    	        }else {  
    	            y+=1900;  
    	        }  
    	        if(((y%4==0&&y%100!=0)||y%400==0) && m==2 && d>0 && d<=29)  
    	        {  
    	            set.add(Integer.parseInt(""+y+mon+day));  
    	        }  
    	        if(y%4!=0 && m==2 && d>0 &&d<=28)  
    	        {  
    	            set.add(Integer.parseInt(""+y+mon+day));  
    	        }  
    	        if((m==1||m==3||m==5||m==7||m==8||m==10||m==12) && d>0 && d<=31)  
    	        {  
    	            set.add(Integer.parseInt(""+y+mon+day));  
    	        }  
    	        if((m==4|| m==6|| m==9|| m==11) && d>0&&d<=30)  
    	        {  
    	            set.add(Integer.parseInt(""+y+mon+day));  
    	        }  
    	              
    	    }  
    	public static void main(String[] args) {  
    	    Scanner in = new Scanner(System.in);  
    	    String str = in.nextLine();  
    	    String[] s =str.split("/");  
    	    f(s[0],s[1],s[2]);  
    	    f(s[2],s[0],s[1]);  
    	    f(s[2],s[1],s[0]);  
    	    list.addAll(set);  
    	    for(int i=0;i<list.size();i++)  
    	    {  
    	        String ans = ""+list.get(i);  
    	        System.out.println(ans.substring(0, 4)+"-"+ans.substring(4,6)+"-"+ans.substring(6,8));  
    	    }  
    	      
    	} 
    
    }
    
    
  • 相关阅读:
    POJ 3630 Phone List/POJ 1056 【字典树】
    HDU 1074 Doing Homework【状态压缩DP】
    POJ 1077 Eight【八数码问题】
    状态压缩 POJ 1185 炮兵阵地【状态压缩DP】
    POJ 1806 Manhattan 2025
    POJ 3667 Hotel【经典的线段树】
    状态压缩 POJ 3254 Corn Fields【dp 状态压缩】
    ZOJ 3468 Dice War【PD求概率】
    POJ 2479 Maximum sum【求两个不重叠的连续子串的最大和】
    POJ 3735 Training little cats【矩阵的快速求幂】
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13079405.html
Copyright © 2011-2022 走看看