题:2022 年 2 月 22 日 22: 2022:20 是一个很有意义的时间, 年份为 2022 , 由 3 个 2 和 1 个 0 组成, 如果将月和日写成 4 位, 为 0222 , 也是由 3 个 2 和 1 个 0 组 成, 如果将时间中的时和分写成 4 位, 还是由 3 个 2 和 1 个 0 组成。
小蓝对这样的时间很感兴趣, 他还找到了其它类似的例子, 比如 111 年 10 月 11 日 01: 11,220201:11,2202 年 2 月 22 日 22: 0222:02 等等。
请问, 总共有多少个时间是这种年份写成 4 位、月日写成 4 位、时间写成 4 位后由 3 个一种数字和 1 个另一种数字组成。注意 1111 年 11 月 11 日 11: 1111:11 不算,因为它里面没有两种数字。
//特殊时间
public class Test {
static int day_month[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
// 检查日期D是否合法
public static int check_D(int D) {
int month = D / 100;
int day = D % 100;
if (month < 1 || month > 12)
return 0;
if (day < 1 || day > day_month[month])
return 0;
return 1;
}
// 检查小时H是否合法
public static int check_H(int H) {
int h = H / 100;
int m = H % 100;
if (h < 0 || h > 23)
return 0;
if (m < 0 || m > 59)
return 0;
return 1;
}
public static void main(String[] args) {
int ans = 0;
// 枚举第一个数字
for (int a = 0; a <= 9; a++)
// 枚举第二个数字
for (int b = 0; b <= 9; b++)
if (a != b) {
// 合法数量
int N_Y = 4, N_D = 0, N_H = 0;
int[] A = new int[] {a,a,a,a};
// 枚举第四种情况aaab,aaba,abaa,baaa
for (int i = 0; i < 4; i++) {
A[i] = b;
int number = 0;
for (int j = 0; j < 4; j++)
number = number * 10 + A[j];
N_D += check_D(number);
N_H += check_H(number);
A[i] = a;
}
ans += N_Y * N_D * N_H;
}
System.out.println(ans);
}
}