今日「每日一题」来啦!历年真题题目:跑步锻炼。还没有加入专属刷题群的小伙伴,记得扫码哟~(每天会在群里发蓝桥杯历年真题)
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝每天都锻炼身体。
正常情况下,小蓝每天跑 1 千米。如果某天是周一或者月初(1 日),为了激励自己,小蓝要跑 2 千米。如果同时是周一或月初,小蓝也是跑 2 千米。
小蓝跑步已经坚持了很长时间,从 2000 年 1 月 1 日周六(含)到 2020 年 10 月 1 日周四(含)。请问这段时间小蓝总共跑步多少千米?
本题使用的知识点为 日期枚举,涉及组别为第 11 届蓝桥杯软件类 C/C++ B/C 组、Java C 组和 Python 组。
这是一道简单模拟题,主要需要解决两个问题:
-
是否是月初
-
是否是周天
我们可以枚举从 2000 年 1 月 1 日到 2020 年 10 月 1 日的所有日期:用 y、m、d 分表表示当前枚举的年、月、日,那么当 d=1 为月初,否则不为月初,问题一解决。
同时我们可以定义 week 表示当前日期所对应的星期,这样下一个日期所对应的星期就为 (week+1)%7。那么当 week=1 时为周一,否则不为周一,问题二解决。
最后模拟一下即可(注意判断闰年),答案为 8879。
1.Java
import java.util.*;
public class Main{
public static void main(String[] args) {
int week = 6;
int ans = 0;
int[] D = {31,28,31,30,31,30,31,31,30,31,30,31};
for(int y = 2000 ; y <= 2020 ; y ++) {
if(y % 4 == 0 && y % 100 != 0|| y % 400 == 0) D[1] = 29;
else D[1] = 28;
for(int m = 0 ; m < 12 ; m ++) {
for(int d = 1 ; d <= D[m] ; d ++) {
if(d == 1 || week == 1) ans += 2;
else ans += 1;
week = (week + 1) % 7;
if(y == 2020 && m == 9 && d == 1) {
System.out.println(ans);
return;
}
}
}
}
}
}
2.C/C++
using namespace std;
int D[13];
bool check(int y){
if(y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) return true;
return false;
}
signed main()
{
D[1] = 31 , D[2] = 28 , D[3] = 31 , D[4] = 30 , D[5] = 31 , D[6] = 30;
D[7] = 31 , D[8] = 31 , D[9] = 30 , D[10] = 31 , D[11] = 30 , D[12] = 31;
int ans = 0 , week = 6;
for(int y = 2000 ; y <= 2020 ; y ++){
if(check(y)) D[2] = 29;
else D[2] = 28;
for(int m = 1 ; m <= (y == 2020 ? 10 : 12) ; m ++){
if(y == 2020 && m == 10) D[m] = 1;
for(int d = 1 ; d <= D[m] ; d ++){
if(week == 1 || d == 1) ans += 2;
else ans += 1;
week = (week + 1) % 7;
}
}
}
cout << ans << 'n';
return 0;
}
3.Python
import os
import sys
import datetime
start = datetime.date(2000, 1, 1)
end = datetime.date(2020, 10, 1)
days = datetime.timedelta(days=1)
ans = 0
while end >= start:
if start.day == 1 or start.weekday() == 0:
ans += 2
else:
ans += 1
start += days
print(ans)
今日的「每日一题」就结束啦~备战第 14 届蓝桥杯的小伙伴,快来一起刷题吧~
▼加入蓝桥杯备赛刷题▼
原文始发于微信公众号(蓝桥云课精选):蓝桥杯历年真题官方题解——跑步锻炼
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论