文章目录
- 试题 B:跑步锻炼
- 【问题描述】
- 【思路】
- 【代码】
- 【结果】
- 【做题链接】
试题 B:跑步锻炼
类型:结果填空,总分:5分
【问题描述】
小蓝每天都锻炼身体。
正常情况下,小蓝每天跑 1 千米。如果某天是周一或者月初(1 日),为了激励自己,小蓝要跑 2 千米。如果同时是周一或月初,小蓝也是跑 2 千米。
小蓝跑步已经坚持了很长时间,从 2000 年 1 月 1 日周六(含)到 2020 年 10 月 1 日周四(含)。请问这段时间小蓝总共跑步多少千米?
【思路】
- 这种时间模拟的题在蓝桥杯中还是比较常见的,一般跨度不大遍历就可以了,一些基本操作要熟悉,比如用一个数组存下每个月的天数,判断闰年(两种情况是闰年,
能被4整除 并且 不能被100整除或者能被400整除)。 - 注意遍历时循环的退出,在暴力解填空题的时候使用
System.exit(0)在达到条件时退出程序比较方便,尤其是循环层数比较多的时候。
【代码】
public class Main {public static int[] dayOfMonth = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //每月的天数//判断闰年public static boolean isLeapYear(int year) {return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);}public static void main(String[] args) {int ans = 0, week = 5;for(int y = 2000; y <= 2020; y++) { //遍历年//判断是否为闰年,闰年二月二十九,平年二月二十八if(isLeapYear(y)) {dayOfMonth[2] = 29;} else {dayOfMonth[2] = 28;}for(int m = 1; m <= 12; m++) { //遍历月for(int d = 1; d <= dayOfMonth[m]; d++) { //遍历每天ans++; //跑一千米week++;if(week == 8) { //代表星期几,累加到8就是下一个星期一week = 1;}if(week == 1 || d == 1) { //是每个月初或者周一,多跑一千米ans++;}if(y == 2020 && m == 10 && d == 1) { //到2020年10月1日了System.out.println(ans); //输出跑了多少米System.exit(0); //退出程序}}}}}
}
【结果】
8879
【做题链接】
https://www.lanqiao.cn/problems/597/learning/