天天看點

藍橋杯 曆屆試題 日期

問題描述   小明正在整理一批曆史文獻。這些曆史文獻中出現了很多日期。小明知道這些日期都在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);

	}
}
           

繼續閱讀