题目
跑步锻炼https://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 <iostream>
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; // 初始化答案为0while (y != 2020 || m != 10 || d != 2) // 循环直到日期达到 2020 年 10 月 2 日{if (d == 1 || w == 1) ans += 2; // 如果是每月的第一天或者星期一,答案加2else ans++; // 否则答案加1d++; // 天数加1if (d > daysofmonth(y, m)) // 如果天数超过了这个月的天数{d = 1; // 天数重置为1m++; // 月份加1}if (m > 12) // 如果月份超过12{m = 1; // 月份重置为1y++; // 年份加1}w++; // 星期几加1if (w == 8) w = 1; // 如果超过7,重置为1}cout << ans << endl; // 输出答案return 0;
}
觉得有用的话可以点点赞,支持一下。
如果愿意的话关注一下。会对你有更多的帮助。
每天都会不定时更新哦 >人< 。