小蓝每天都锻炼身体。
正常情况下,小蓝每天跑1千米。如果某天是周一或者月初(1日),为了激励自己,小蓝要跑2千米。如果同时是周一或月初,小蓝也是跑2千米。
小蓝跑步已经坚持了很长时间,从2000年1月1日周六(含)到2020年10月1日周四(含)。请问这段时间小蓝总共跑步多少千米
这道题的思路很简单,用伪代码跟大家讲一下吧
初始化月份
int main()
{
定义并初始化日期
while(1){
千米数递增(特殊考虑月初和周一+2k)
判断终止日期并退出
星期数循环递增、天数加一
月数加一(特殊考虑一下闰年2月多一天)
年数加一
}
输出
}
#include<iostream>
using namespace std;
int month[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int main() {
//初始化日期
int y = 2000, m = 1, d = 1, w = 6, ans = 0;
while (true) {
//千米书累加
ans += (d == 1 || w == 1) + 1;
if (y == 2020 && m == 10 && d == 1) {
break;
}
//日期天数递增
w =( w + 1 ) % 7;
d = d + 1;
//天数循环,月数加一
if(( y % 400 == 0 || y % 4 == 0 && y % 100 != 0 ) && m == 2){//闰年且为二月
if (d > month[m] + 1) {
d = 1;
m += 1;
}
}else if (d > month[m]) {
d = 1;
m += 1;
}
//月份循环,年数加一
if (m == 13) {
y += 1;
m = 1;
}
}
printf("%d\n", ans);
return 0;
}