跑步锻炼

跑步锻炼

  • 题目描述

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

小蓝每天都锻炼身体。

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

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

ac

#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;
}
#include <iostream>
#include <cstring>
#include <algorithm>

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 % 100 != 0 && y % 4 == 0 || y % 400 == 0;
}

int daysOfMonth(int y, int m){
    if (m == 2)
        return 28 + is_leap(y);
    return days[m];
}

int main()
{
    int y = 2000, m = 1, d = 1, w = 6;
    int res = 0;
    while (y != 2020 || m != 10 || d != 2){
        if (d == 1 || w == 1)
            res += 2;
        else
            res ++;
        w ++;
        if (w == 8)
            w = 1;
        d ++;
        if (d > daysOfMonth(y, m)){
            m ++, d = 1;
            if (m == 13)
                m = 1, y ++;
        }
    }
    cout << res << endl;
    return 0;
}
  • 简单模拟题,主要需要解决两个问题:---摘抄

    • 是否是月初
    • 是否是周天

    我们可以枚举从 20002000 年 11 月 11 日到 20202020 年 1010 月 11 日的所有日期:用 yy、mm、dd 分表表示当前枚举的年、月、日,那么当 d=1d=1 为月初,否则不为月初。问题一解决。

    同时我们可以定义 weekwee**k 表示当前日期所对应的星期,这样下一个日期所对应的星期就为 (week+1)%7(wee**k+1)。那么当 week=1wee**k=1 时为周一,否则不为周一。问题二解决。

    最后模拟一下即可(注意判断闰年),答案为 8879

posted @ 2022-12-22 20:31  跬步瑶  阅读(36)  评论(0)    收藏  举报