在蓝桥杯练习系统中提交,始终只有50分,没有vip特权,看不了评测用例。
有没有同志看看哪里出问题了,万分感谢!
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Main {
static ArrayList<String> list = new ArrayList<String>();
public static void main(String[] args) {
String[] date = new Scanner(System.in).nextLine().split("/");
allSort(date, 0);
Collections.sort(list);
String beforeString = "";
for (int i = 0; i < list.size(); i++) {
if (!list.get(i).equals(beforeString)) {
System.out.println(list.get(i));
}
beforeString = list.get(i);
}
}
public static void allSort(String[] date, int k) {
if (k == 3) {
isTrue(date);
return;
}
for (int i = k; i < 3; i++) {
String string = date[i];
date[i] = date[k];
date[k] = string;
allSort(date, k + 1);
string = date[i];
date[i] = date[k];
date[k] = string;
}
}
private static void isTrue(String[] date) {
int year = Integer.parseInt(date[0]);
if (year >= 60 && year <= 99) {
year += 1900;
} else {
year += 2000;
}
int month = Integer.parseInt(date[1]);
int day = Integer.parseInt(date[2]);
if (month >= 1 && month <= 12) {
int flag = 0;
switch (month) {
case 1:
if (day >= 1 && day <= 31) {
flag = 1;
}
break;
case 3:
if (day >= 1 && day <= 31) {
flag = 1;
}
break;
case 5:
if (day >= 1 && day <= 31) {
flag = 1;
}
break;
case 7:
if (day >= 1 && day <= 31) {
flag = 1;
}
break;
case 8:
if (day >= 1 && day <= 31) {
flag = 1;
}
break;
case 10:
if (day >= 1 && day <= 31) {
flag = 1;
}
break;
case 12:
if (day >= 1 && day <= 31) {
flag = 1;
}
break;
case 4:
if (day >= 1 && day <= 30) {
flag = 1;
}
break;
case 6:
if (day >= 1 && day <= 30) {
flag = 1;
}
break;
case 9:
if (day >= 1 && day <= 30) {
flag = 1;
}
break;
case 11:
if (day >= 1 && day <= 30) {
flag = 1;
}
break;
case 2:
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {// 闰年
if (day >= 1 && day <= 29) {
flag = 1;
}
} else {
if (day >= 1 && day <= 28) {
flag = 1;
}
}
break;
}
if (flag == 1) {
String smonth = month < 10 ? "0" + month : month + "";
String sday = day < 10 ? "0" + day : day + "";
String result = year + "-" + smonth + "-" + sday;
list.add(result);
}
}
}
}
public class DateProblem {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
Scanner scanner = new Scanner(System.in);
String string=scanner.nextLine();
String res[]=string.split("/"); //01/02/03
int a=Integer.valueOf(res[0]);
int b=Integer.valueOf(res[1]);
int c=Integer.valueOf(res[2]);
if(fun(a,b,c)){ //fun(a,b,c)判断是否合法
set.add(fullcheck(a,b, c)); //做好格式转换添加
}
if(fun(c,a,b)){ //fun(a,b,c)判断是否合法
set.add(fullcheck(c,a,b)); //做好格式转换添加
}
if(fun(c,b,a)){ //fun(a,b,c)判断是否合法
set.add(fullcheck(c,b,a)); //做好格式转换添加
}
for(String i:set){
System.out.println(i);
}
}
static boolean fun(int a,int b,int c){
if(b>12||c>31||b==0||c==0)return false; //起始要求:0
if(!isleap(a)&&b==2) //如果是平年 月份为二 c!=29 30 31
if(c==29||c==30||c==31)return false;
if(isleap(a)&&b==2) //如果是闰年 月份为二 c!=30 31
if(c==30||c==31)
return false;
switch (b){ //判断日可否为31天 //1 3 5 7 8 10 12
case 4:
case 6:
case 9:
case 11:
if(c==31)return false;
break;
default:break;
}
return true;
}
static String fullcheck(int a,int b,int c){
return ((a>=60?"19":"20")+ToString(a)+"/"+ToString(b)+"/"+ToString(c));
}
static String ToString(int a){
if(a<10)return ("0"+ a);
else return String.valueOf(a);
}
static boolean isleap(int a){
int b=a+((a>=60)?1900:2000);
return ((b%4==0)&&(b%100!=0))||(b%400==0);
}
}