日期问题,(蓝桥杯)

小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在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  

程序代码:

public class YearAndMonth {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in); 
//输入内容(格式 A/B/C)
String str=scanner.nextLine();
//将输入的字符串分割成数组
String[] value=str.split("/");
//列出可能的情况
String[] possible1={value[0],value[1],value[2]};
String[] possible2={value[2],value[1],value[0]};
String[] possible3={value[2],value[0],value[1]};
//添加到集合
List possible=new ArrayList();
possible.add(possible1);
possible.add(possible2);
possible.add(possible3);
//判断日期是否有效
check(possible);
}
/**
* 判断日期是否有效
*/
private static void check(List list){
TreeSet set=new TreeSet();
//遍历
for(String[] p:list){
int year=Integer.parseInt(p[0]);
int month=Integer.parseInt(p[1]);
int day=Integer.parseInt(p[2]);
boolean flag=false;
if((year>=60&&year<=99)||(year>=0&&year<=59)){
if(month==2){//判断是否是2月
if(year%4==0&&year%100!=0||year%400==0){//判断闰年
if(day>=1&&day<=29){
flag=true;
}
}else{
if(day>=1&&day<=28){
flag=true;
}
}
}else if(month>=1&&month<=12){
if(month==4||month==6||month==9||month==11){//判断大、小月
if(day>=1&&day<=30){
flag=true;
}
}else{
if(day>=1&&day<=31){
flag=true;
}
}
}
}
//日期
String date=null;
//如果条件符合
if(flag){
if(year>=60&&year<=99){
date=new String("19"+p[0]+"-"+p[1]+"-"+p[2]);
}else{
date=new String("20"+p[0]+"-"+p[1]+"-"+p[2]);
}
}
//添加到set集合
if(date!=null){
set.add(date);
}
}

for(String s:set){
System.out.println(s);
}
}
}


你可能感兴趣的:(Java,算法)