题目描述
公元 2245
年,一位年轻的考古学家小昆,意外的发现了一处藏于地下的文献档案室。档案室里收录了从 1960
年 1
月 1
日至 2059
年 12
月 31
日的历史文献,这让小昆欣喜若狂。可当小昆准备整理这些文献时,他遇到了麻烦。这些历史文献中出现了很多日期,可是这些日期采用的格式非常不统一,有采用 年/月/日
的,有采用 月/日/年
的,还有采用 日/月/年
的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。
比如 02/03/04
,可能是 2002
年 03
月 04
日、2004
年 02
月 03
日或 2004
年 03
月 02
日。
给出一个文献上的日期,你能帮助小昆判断有哪些可能的日期对其对应吗?
输入输出格式
输入格式
输入一个日期,格式是"AA/BB/CC
"。
输出格式
输出若干个不相同的日期,每个日期一行,格式是"yyyy-MM-dd
"。多个日期按从早到晚排列。
输入输出样例1
输入
02/03/04
输出
2002-03-04
2004-02-03
2004-03-02
输入输出样例2
输入
11/09/05
输出
2005-09-11
2005-11-09
2011-09-05
说明提示
0≤A,B,C≤9【Java代码及解题思路】
【Java代码及解题思路】
import java.util.Arrays;
import java.util.Scanner;
public class Main {
static int[] daysOfMonth = {0,31,28,31,30,31,30,31,31,30,31,30,31};
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String n = scanner.nextLine();
// 分割“/”
String[] str = n.split("/");
// 数组年
String[] years = new String[str.length];
// 数组月
String[] months = new String[str.length];
// 数组日
String[] days = new String[str.length];
//创建数组留着字符串排序用,容量大一些
String[] date = new String[9];
//数组索引
int index = 0;
// years中存放 第一,第三个
years[0] = str[0];
years[1] = str[2];
// months中存放 第一,第二个
months[0] = str[0];
months[1] = str[1];
// days中可以全放
days = str;
// 遍历三数组任何可能结果
for(String year:years){
for(String month:months){
for (String day:days){
//年月日三者都不相同且都不为空
if(year!=month&&month!=day&&day!=year&&year!=null&&month!=null&&day!=null){
//判断闰年
if(runYear(year)){ // 是闰年
//判断2月
if(Integer.parseInt(month)==2&&Integer.parseInt(day)<=29){
//存入待排序的字符串数组
date[index] = realYear(year)+"-"+month+"-"+day;
//索引++
index++;
}else { //不是2月
//判断符合月数和日数
if(isMonth(month)&&isDay(month,day)){
date[index] = realYear(year)+"-"+month+"-"+day;
index++;
}
}
}else { // 不是闰年
//判断符合月数和日数
if(isMonth(month)&&isDay(month,day)){
date[index] = realYear(year)+"-"+month+"-"+day;
index++;
}
}
}
}
}
}
// 新建数组,将date数组中的null值去除
String[] realDate = new String[index];
System.arraycopy(date,0,realDate,0,realDate.length);
//自带排序,不能有null
Arrays.sort(realDate);
//输出
for(String s:realDate){
if(s!=null){
System.out.println(s);
}
}
}
// 判断是否为闰年
public static boolean runYear(String year){
int yy = 0;
int y = Integer.parseInt(year);
if(y<=59){
yy = 2000+y;
}else {
yy = 1900+y;
}
if(yy%4==0){
return true;
}
return false;
}
// 拼接年份前缀
public static String realYear(String year){
int yy = 0;
int y = Integer.parseInt(year);
if(y<=59){
yy = 2000+y;
}else {
yy = 1900+y;
}
return String.valueOf(yy);
}
// 判断是否为月
public static boolean isMonth(String month){
int m = Integer.parseInt(month);
if(m>=1&&m<=12){
return true;
}
return false;
}
// 判断是否为日
public static boolean isDay(String month,String day){
int m = Integer.parseInt(month);
int d = Integer.parseInt(day);
if(isMonth(month)&&d>=1&&d<=daysOfMonth[m]){
return true;
}
return false;
}
}