题目描述
分析
1、
days
表示从从2020年1月1日
至某年某月某日
的天数
2、用1~7
表示周一 至 周日
3、由于2020年1月1日
是周六,那么用(sum + 5) % 7
就能表示某年某月某日
是星期几;
4、穷举2020年1月1日
~2020年10月1日
,可以分为两个部分:
2020/1/1 ~ 2019/12/31
与2020/1/1 ~ 2020 9/30
;由于包括2020/10/1
,最后再sum+=2
答案:8879
参考代码
#include <iostream>
using namespace std;
bool is_leap(int year);
int getDay(int year, int month);
int main()
{
int sum = 0; // 累计跑步公里数
int days = 0;
//int weekday; // 周几
// 先算2000~2019年的跑步的公里数
for(int i = 2000; i <= 2019; i++){
for(int j = 1; j<=12; j++){
for(int k = 1; k <= getDay(i, j); k++){
int weekday = (days + 6) % 7;
if( k == 1 || weekday == 1) sum += 2;
else sum++;
days++;
}
}
}
// 再算2020的公里数
for(int j = 1; j <= 9; j++){
for(int k = 1; k <= getDay(2020, j); k++){
int weekday = (days + 6) % 7;
if( k == 1 || weekday == 1) sum += 2;
else sum++;
days++;
}
}
sum += 2;
cout << sum << endl;
return 0;
}
// 判断是否为闰年,是则返回1,否侧返回0
bool is_leap(int year){
return ( year%400 == 0 || (year%100 != 0 && year%4 == 0) );
}
// 获取指定月份的天数
int getDay(int year, int month){
int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if(month == 2) return 28 + is_leap(year);
else return days[month];
}