问题描述
小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。
比如02/03/04,可能是2002年03月04日、2004年02月03日或2004年03月02日。
给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?
比如02/03/04,可能是2002年03月04日、2004年02月03日或2004年03月02日。
给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?
输入格式
一个日期,格式是"AA/BB/CC"。 (0 <= A, B, C <= 9)
输出格式
输出若干个不相同的日期,每个日期一行,格式是"yyyy-MM-dd"。多个日期按从早到晚排列。
解题思路:
这是2017年省赛的一道送分题。不涉及到任何复杂的算法。但是想一次写对,难度还是有的。
主要的点在闰年判断,年份时间排序,字符串转数字再生成一个新的字符串。
代码写的很乱也没有注释……建议自己做吧。
import java.io.*;
class Main{
public static boolean jud(int year){
if(year%4==0 && year%100!=0){
return true;
}
if(year%100==0&&year%400==0){
return true;
}
return false;
}
public static String day(int year,int month,int dayt){
String c="";
if(year<=59){
if(year<10)
c="200"+year;
else
c="20"+year;
}
else{
c="19"+year;
}
if(month>12){
return "";
}
switch (month) {
case 1:
if(dayt<=31){
if(dayt<10)
c+="-01-0"+dayt;
else
c+="-01-"+dayt;
}
break;
case 2:
if(dayt<=29){
if(dayt<10)
c+="-02-0"+dayt;
else if(dayt<=28)
c+="-02-"+dayt;
else if(dayt==29){
if(jud(Integer.parseInt(c))){
c+="-02-"+dayt;
}
}
}
break;
case 3:
if(dayt<=31){
if(dayt<10)
c+="-03-0"+dayt;
else
c+="-03-"+dayt;
}
break;
case 4:
if(dayt<=30){
if(dayt<10)
c+="-04-0"+dayt;
else
c+="-04-"+dayt;
}
break;
case 5:
if(dayt<=31){
if(dayt<10)
c+="-05-0"+dayt;
else
c+="-05-"+dayt;
}
break;
case 6:
if(dayt<=30){
if(dayt<10)
c+="-06-0"+dayt;
else
c+="-06-"+dayt;
}
break;
case 7:
if(dayt<=31){
if(dayt<10)
c+="-07-0"+dayt;
else
c+="-07-"+dayt;
}
break;
case 8:
if(dayt<=31){
if(dayt<10)
c+="-08-0"+dayt;
else
c+="-08-"+dayt;
}
break;
case 9:
if(dayt<=30){
if(dayt<10)
c+="-09-0"+dayt;
else
c+="-09-"+dayt;
}
break;
case 10:
if(dayt<=31){
if(dayt<10)
c+="-10-0"+dayt;
else
c+="-10-"+dayt;
}
break;
case 11:
if(dayt<=30){
if(dayt<10)
c+="-11-0"+dayt;
else
c+="-11-"+dayt;
}
break;
case 12:
if(dayt<=31){
if(dayt<10)
c+="-12-0"+dayt;
else
c+="-12-"+dayt;
}
break;
default:
break;
}
if(c.length()>5){
return c;
}
return "";
}
public static void output(String [] re,int[] out){
for(int i=0;i<3;i++){
if(re[out[i]]!=""&&re[out[i]]!=null){
System.out.println(re[out[i]]);
}
}
}
public static void main(String []args)throws IOException{
BufferedReader bfr=new BufferedReader(new InputStreamReader(System.in));
String c[]=bfr.readLine().split("/");
int A=Integer.parseInt(c[0]);
int B=Integer.parseInt(c[1]);
int C=Integer.parseInt(c[2]);
int out[]={0,1,2};
for(int i=0;i<3;i++){
if(A>C&&C<60){
if(A>B&&B<=12){
out[0]=2;
out[1]=1;
out[2]=0;
}
else{
out[0]=1;
out[1]=2;
out[2]=0;
}
}
else if(A>B&&B<=12){
out[0]=0;
out[1]=2;
out[2]=1;
}
}
String re[]=new String[3];
if(C!=0)
re[0]=day(A,B,C);
if(A==B){
if(A==C){
output(re, out);
return;
}
if(B!=0)
re[1]=day(C,A,B);
output(re, out);
return;
}
if(B!=0)
re[1]=day(C,A,B);
if(A!=0)
re[2]=day(C,B,A);
output(re, out);
}
}