蓝桥杯第597题 跑步锻炼 C++ 日期模板题(模拟经典)

题目

跑步锻炼icon-default.png?t=N7T8https://www.lanqiao.cn/problems/597/learning/?page=1&first_category_id=1&name=%E8%B7%91%E6%AD%A5%E9%94%BB%E7%82%BC

题目描述

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

小蓝每天都锻炼身体。

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

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

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 128M

思路和解题方法

  • 定义了一个数组days来表示每个月份的天数。is_leap函数用于判断是否为闰年,根据闰年的规则进行判断。daysofmonth函数根据给定的年份和月份,计算该月的天数。
  • 在主函数main中,初始化了年、月、日和星期几的变量。然后进入一个循环,直到日期达到2020年10月2日时循环结束。在循环中,根据特定条件对答案进行累加。如果是每个月的第一天或者星期一,答案会加2,否则答案会加1。每次循环完成后,更新天数、月份、年份和星期几的变量。特别地,当天数超过了该月的天数时,将天数重置为1,并增加月份;当月份超过12时,将月份重置为1,并增加年份。同时,星期几也会根据循环次数自增,当超过7时,重置为1。
  • 最后,输出累加得到的答案。

c++ 代码

#include 
using namespace std;

// 定义一个数组来表示每个月份的天数
int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

// 判断是否为闰年
bool is_leap(int y)
{
    return y % 400 == 0 || (y % 4 == 0 && y % 100 != 0);
}

// 计算某一年某个月的天数
int daysofmonth(int y, int m)
{
    if (m == 2) 
        return is_leap(y) ? 29 : 28; // 如果是闰年,返回29天,否则返回28天
    else 
        return days[m]; // 其他月份直接查表返回对应天数
}

int main()
{
    int y = 2000, m = 1, d = 1, w = 6; // 初始化年、月、日和星期几
    int ans = 0; // 初始化答案为0
    while (y != 2020 || m != 10 || d != 2) // 循环直到日期达到 2020 年 10 月 2 日
    {
        if (d == 1 || w == 1) 
            ans += 2; // 如果是每月的第一天或者星期一,答案加2
        else 
            ans++; // 否则答案加1
        
        d++; // 天数加1
        if (d > daysofmonth(y, m)) // 如果天数超过了这个月的天数
        {
            d = 1; // 天数重置为1
            m++; // 月份加1
        }
        if (m > 12) // 如果月份超过12
        {
            m = 1; // 月份重置为1
            y++; // 年份加1
        }
        
        w++; // 星期几加1
        if (w == 8) 
            w = 1; // 如果超过7,重置为1
    }
    cout << ans << endl; // 输出答案
    return 0;
}

觉得有用的话可以点点赞,支持一下。

如果愿意的话关注一下。会对你有更多的帮助。

每天都会不定时更新哦  >人<  。

你可能感兴趣的:(蓝桥杯,模拟,数据结构,算法,c++,蓝桥杯,日期)