知识点
处理日期
1. 按天枚举日期:逐天遍历起始日期到结束日期范围内的每个日期。
2. 处理闰年:正确判断闰年条件。闰年定义为:年份 满足以下任意一个条件:(闰年的2月只有29天)
满足下面一个条件就是闰年
1> 是 400 的倍数。
2> 是 4的倍数但不是 100的倍数
艺术与篮球
已知当前是星期几求出某个月的某一天是星期几
int week=x;x为第一天的日期
week = week%7+1求出每个星期的下一天
题目链接
1.艺术与篮球 - 蓝桥云课
题目解析
判断笔画数是不是超过50,超过50就去练习书法
算法原理
使用哈希表,把笔画和对应的数字联系在一起
使用日期函数来标记时间的开始和结尾,然后遍历每一天去计算笔画数
代码编写
import java.time.LocalDate;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<Character, Integer> map = new HashMap<Character, Integer>() {{
put('0', 13); // 零
put('1', 1); // 一
put('2', 2); // 二
put('3', 3); // 三
put('4', 5); // 四
put('5', 4); // 五
put('6', 4); // 六
put('7', 2); // 七
put('8', 2); // 八
put('9', 2); // 九
}};
LocalDate startDate = LocalDate.of(2000, 1, 1);
LocalDate endDate = LocalDate.of(2024, 4, 14);
int days = 0;
while (startDate.isBefore(endDate)) {
String s = startDate.toString().replace("-", "");
int total = 0;
// 通过map查询笔画数
for (char c : s.toCharArray()) {
total += map.get(c);
}
if (total > 50) {
days++;
}
startDate = startDate.plusDays(1);
}
System.out.println(days);
}
}
从哪开始从哪结束
LocalDate startDate = LocalDate.of(2000, 1, 1);
LocalDate endDate = LocalDate.of(2024, 4, 14);
while
循环会一直执行,直到 startDate
等于或超过 endDate
。循环会逐日增加 startDate
,并计算当天日期的数字笔画数。
startDate.isBefore(endDate)
转为Srting类型,并且去除-
startDate.toString().replace("-", "");
自增天数
startDate = startDate.plusDays(1);
补充: 获得xxx年xxx月xx日是星期几
可以使用
LocalDate date = LocalDate.of(2026, 4, 1); // 获取星期几(英文)
String weekday = date.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.ENGLISH);
另一种写法
//造一个hash表,里面对应笔画数
int[] hash = {13, 1, 2, 3, 5, 4, 4, 2, 2, 2};
//month里面放每月的个数
int[] months = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
//计算打篮球的天数
int count = 0;
boolean feb = true;
for (int year = 2000; year <= 2024; year++) {
//笔画数
int num = 0;
//判断是平年还是润年
//计算2月的值
months[2] = isLeapYear(year) ? 29 : 28;
//计算每一月,每一天
for (int month = 1; month <= 12; month++) {
for (int day = 1; day < months[month]; day++) {
//计算年的每一位
int ypos1 = year / 1000;
year = year % 1000;
int ypos2 = year / 100;
year = year % 100;
int ypos3 = year / 10;
year = year % 10;
int ypos4 = year;
//计算月的每一位
int mpos1 = month / 10;
month = month % 10;
int mpos2 = month;
//计算每一天的每一位
int dpos1 = day / 10;
day = day % 10;
int dpos2 = day;
//计算笔画数
num = hash[ypos1] + hash[ypos2] + hash[ypos3] + hash[ypos4] +
hash[mpos1] + hash[mpos2] + hash[dpos1] + hash[dpos2];
//最后计算天数
if (num > 50) {
count++;
}
if (year == 2024 && month == 4 && day == 13) {
System.out.println(count);
return;
}
}
}
}
}
public static void main(String[] args) {
cal();
}