# [蓝桥杯 2017 省 B] 日期问题
## 题目描述
小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在 1960 年 1 月 1 日至 2059 年 12 月 31 日。令小明头疼的是,这些日期采用的格式非常不统一,有采用`年/月/日`的,有采用`月/日/年`的,还有采用`日/月/年`的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。
比如 `02/03/04`,可能是 2002 年 03 月 04 日、2004 年 02 月 03 日或 2004 年 03 月 02 日。
给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?
## 输入格式
一个日期,格式是 `AA/BB/CC`。($0\le A, B, C\le 9$)
## 输出格式
输出若干个不相同的日期,每个日期一行,格式是 `yyyy-MM-dd`。多个日期按从早到晚排列。
## 样例 #1
### 样例输入 #1
```
02/03/04
```
### 样例输出 #1
```
2002-03-04
2004-02-03
2004-03-02
```
import java.util.*;
class Main
{
static Map<Integer,Integer> map=new HashMap<>();
static List<String> list=new ArrayList<>();
public static void main(String[] args) {
// TODO Auto-generated method stub
map.put(1, 31);
map.put(2, 28);
map.put(3, 31);
map.put(4, 30);
map.put(5, 31);
map.put(6, 30);
map.put(7, 31);
map.put(8, 31);
map.put(9, 30);
map.put(10, 31);
map.put(11, 30);
map.put(12, 31);
Scanner sc=new Scanner(System.in);
String[] arr=sc.nextLine().split("/");
int n1=Integer.valueOf(arr[0]);
int n2=Integer.valueOf(arr[1]);
int n3=Integer.valueOf(arr[2]);
if (n2>=1&&n2<=12)
{
StringBuilder sb=new StringBuilder();
func(n1,n2,n3,sb);
}
if (n1>=1&&n1<=12)
{
StringBuilder sb=new StringBuilder();
func(n3,n1,n2,sb);
}
if (n2>=1&&n2<=12)
{
StringBuilder sb=new StringBuilder();
func(n3,n2,n1,sb);
}
//System.out.println(list.toString());
Collections.sort(list,(o1,o2)->{
int[] arr1=new int[3];
int[] arr2=new int[3];
String[] s1=o1.split("-");
String[] s2=o2.split("-");
for (int i=0;i<3;i++)
{
arr1[i]=Integer.valueOf(s1[i]);
arr2[i]=Integer.valueOf(s2[i]);
}
if (arr1[0]!=arr2[0])
{
return arr1[0]-arr2[0];
}
else if (arr1[1]!=arr2[1])
{
return arr1[1]-arr2[1];
}
else
{
return arr1[2]-arr2[2];
}
});
for (int i=0;i<list.size();i++)
{
System.out.println(list.get(i));
}
sc.close();
}
public static boolean judge(int n)
{
return (n%4==0&&n%100!=0)||(n%400==0);
}
public static void func(int n1,int n2,int n3,StringBuilder sb)
{
int year=0;
if (n1>=0&&n1<=59)
{
year=2000+n1;
sb.append("20");
}
else
{
year=1900+n1;
sb.append("19");
}
if (judge(year))
{
if (n2==2)
{
if (n3<1||n3>29)
{
return;
}
}
else
{
if (n3<1||n3>map.get(n2))
{
return;
}
}
}
else
{
if (n3<1||n3>map.get(n2))
{
return;
}
}
if (n1<10&&n1>=0)
{
sb.append("0");
}
sb.append(n1);
sb.append("-");
if (n2<10&&n2>=0)
{
sb.append("0");
}
sb.append(n2);
sb.append("-");
if (n3<10&&n3>=0)
{
sb.append("0");
}
sb.append(n3);
String s=sb.toString();
if (!list.contains(s))
{
list.add(s);
}
}
}