题目描述
blablabla
枚举
import java.util.Scanner;
/*
a/b/c a能做日、月、年 b能做月、日 c能做年、日
三种情况:
1.a做年 b做月 c做日
2.c做年 b做月 a做日
3.c做年 a做日 b做月
*/
public class Main {
static int[] days = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
static boolean checkValid(int year, int month, int day) {
//检查月是否合法
if (month == 0 || month > 12) return false;
//检查日是否合法
if (day == 0) return false;
//检查日是否合法
if (month != 2) {
if (day > days[month]) return false;
} else {
int leap = (year % 100 != 0 && year % 4 == 0) || (year % 400 == 0) ? 1 : 0;
if (day > 28 + leap) return false;
}
return true;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.next();
String[] parts = input.split("/");
int a = Integer.parseInt(parts[0]);
int b = Integer.parseInt(parts[1]);
int c = Integer.parseInt(parts[2]);
//日期从小到大依次枚举,去寻找符合条件的,输出自然是从小到大
for (int date = 19600101; date <= 20591231; date++) {
int year = date / 10000;//取前四位
int month = date % 10000 / 100;//先取后四位,再取前两位
int day = date % 100;//取后两位
//先检查年、日、月的合法性
if (checkValid(year, month, day)) {
//去判断三种情况
if (year % 100 == a && month == b && day == c ||
month == a && day == b && year % 100 == c ||
day == a && month == b && year % 100 == c) {
//%d用于整数格式,%02d用于确保月份和日期都有两位数,可以用来填充0,%n用于换行。
System.out.printf("%d-%02d-%02d%n", year, month, day);
}
}
}
}
}