問題描述 小明正在整理一批曆史文獻。這些曆史文獻中出現了很多日期。小明知道這些日期都在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"。多個日期按從早到晚排列。
解題思路:
這是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);
}
}