蓝桥杯历年真题官方题解——跑步锻炼

admin 2022年9月28日20:49:21CTF专场评论32 views1718字阅读5分43秒阅读模式
蓝桥杯历年真题官方题解——跑步锻炼
点击蓝字 关注我们
蓝桥杯历年真题官方题解——跑步锻炼

今日「每日一题」来啦!历年真题题目:跑步锻炼。还没有加入专属刷题群的小伙伴,记得扫码哟~(每天会在群里发蓝桥杯历年真题)


蓝桥杯历年真题官方题解——跑步锻炼


题目描述


本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。


小蓝每天都锻炼身体。


正常情况下,小蓝每天跑 1 千米。如果某天是周一或者月初(1 日),为了激励自己,小蓝要跑 2 千米。如果同时是周一或月初,小蓝也是跑 2 千米。


小蓝跑步已经坚持了很长时间,从 2000 年 1 月 1 日周六(含)到 2020 年 10 月 1 日周四(含)。请问这段时间小蓝总共跑步多少千米?


解题思路


本题使用的知识点为 日期枚举,涉及组别为第 11 届蓝桥杯软件类 C/C++ B/C 组、Java C 组和 Python 组


这是一道简单模拟题,主要需要解决两个问题:

  • 是否是月初

  • 是否是周天

我们可以枚举从 2000 年 1 月 1 日到 2020 年 10 月 1 日的所有日期:用 ymd 分表表示当前枚举的年、月、日,那么当 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++

#include<bits/stdc++.h>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 osimport sysimport 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 += daysprint(ans)


今日的「每日一题」就结束啦~备战第 14 届蓝桥杯的小伙伴,快来一起刷题吧~


▼加入蓝桥杯备赛刷题▼

蓝桥杯历年真题官方题解——跑步锻炼

原文始发于微信公众号(蓝桥云课精选):蓝桥杯历年真题官方题解——跑步锻炼

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年9月28日20:49:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  蓝桥杯历年真题官方题解——跑步锻炼 http://cn-sec.com/archives/1322201.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: