更多JAVA版答案移步我的博客:蓝桥杯JAVA版答案汇总
本题考查
本题可以使用JAVA的date类进行求解(法一),也可以编写判断逻辑进行判断(法二)
思路
法一:调用java的date类尝试将字符串转换为日期,若转化不成功则有catch语句获取错误,若成功加入列表。最后列表排序,再用一个日期格式化器将日期格式化为“yyyy-MM-dd”格式。注意:format.setLenient(false)
一定要有,否则格式化器将对日期格式进行宽松处理,会出现错误。
法二:分别将三种可能性传入判断函数进行判断
判断函数逻辑
- 若二位年份大于等于60,则年份为1900+二位年份;否则为2000+二位年份
- 判断年份是否为闰年,若是二月有29天,否则二月有28天
- 判断月份是否大于0小于等于12,判断日期是否大于0小于等于对应月份天数,若两条件皆满足,则判断列表内是否有该日期,若没有则加入列表,若有则结束该函数
- 当所有情况判断完毕后,对列表进行排序,输出
AC代码
两段代码皆AC,调用方法可能比编写逻辑执行要快一点
法一:
import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.Date;
import java.util.LinkedList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scaner = new Scanner(System.in);
String[] strs = scaner.nextLine().split("/");
scaner.close();
LinkedList<Date> list = new LinkedList<Date>();
String date_str = strs[0]+"-"+strs[1]+"-"+strs[2];
try {
SimpleDateFormat format=new SimpleDateFormat("yy-MM-dd");
format.setLenient(false);
Date date = format.parse(date_str);
list.add(date);
} catch (Exception ex) {}
try {
SimpleDateFormat format=new SimpleDateFormat("MM-dd-yy");
format.setLenient(false);
Date date = format.parse(date_str);
if(!list.contains(date)) list.add(date);
} catch (Exception ex) {}
try {
SimpleDateFormat format=new SimpleDateFormat("dd-MM-yy");
format.setLenient(false);
Date date = format.parse(date_str);
if(!list.contains(date)) list.add(date);
} catch (Exception ex) {}
Collections.sort(list);
for(Date d:list) {
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
format.setLenient(false);
System.out.println(format.format(d));
}
}
}
法二:
import java.util.Collections;
import java.util.LinkedList;
import java.util.Scanner;
public class Main {
static LinkedList<String> list;
static boolean isLeapYear(int year) {
if((year%4==0&&year%100!=0)||year%400==0) return true;
else return false;
}
static void check(int aa, int bb, int cc) {
int[] days = new int[] {31,0,31,30,31,30,31,31,30,31,30,31};
if(aa>=60) aa+=1900;
else aa+=2000;
if(isLeapYear(aa)) days[1]=29;
else days[1]=28;
String str = aa+"-"+String.format("%02d", bb)+"-"+String.format("%02d", cc);
if(bb>0&&bb<=12&&cc>0&&cc<=days[bb-1]&&!list.contains(str))
list.add(str);
}
public static void main(String[] args) {
Scanner scaner = new Scanner(System.in);
String[] strs = scaner.nextLine().split("/");
int aa=Integer.parseInt(strs[0]);
int bb=Integer.parseInt(strs[1]);
int cc=Integer.parseInt(strs[2]);
list=new LinkedList<String>();
scaner.close();
check(aa, bb, cc);
check(cc, aa, bb);
check(cc, bb, aa);
Collections.sort(list);
for(String s:list) System.out.println(s);
}
}