题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝每天都锻炼身体。
正常情况下,小蓝每天跑 11 千米。如果某天是周一或者月初(11 日),为了激励自己,小蓝要跑 22 千米。如果同时是周一或月初,小蓝也是跑 22 千米。
小蓝跑步已经坚持了很长时间,从 20002000 年 11 月 11 日周六(含)到 20202020 年 1010 月 11 日周四(含)。请问这段时间小蓝总共跑步多少千米?
实现代码
//#include<bits/stdc++.h>
#include<iostream>
using namespace std;
int main()
{
int days_month[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
// count 总数
// year 年份
// month 月份
// day 某月的几号
// week 是星期几
int count=0,year=2000,month=1,day=1,week=6;
for (;year<=2020;year++)
{
// 闰年修改 2 月份
if(year%400==0 || (year%4==0 && year%100!=0))
{
days_month[2]=29;
}
else
{
// 这句 else 必须加,否则当 2000 年修改闰月以后,2001 年还是会按照 2 月有 29 天来计算。
days_month[2]=28;
}
for(month=1;month<=12;month++)
{
// 到最后一天就退出
if (year==2020 && month==10)
{
count=count+2;
break;
}
// 1 号 、2 号…… 判断月首和周一。
// 对 count 操作
for(day=1;day<=days_month[month];day++)
{
//cout<<i<<" 日"<<endl;
// 周一、月首跑两公里
if(day==1||week==1 /*||(i==1&&week==1)*/)
{
count=count+2;
}
else
{
count=count+1;
}
// week 循环,从 0 到 6 ,0 代表周日
week=(week+1)%7;
}
}
}
cout<<count<<endl;
}
注意点
每次碰到年月日这种题都很怕,老是不敢上手做。希望以后能有改进。
首先注意闰年,对年份要进行判断,而且注意判断逻辑。对于ifelse语句,以后要注意写全。这道题就是因为缺了 else 一段,导致答案计算错误的。
// 闰年修改 2 月份
if(year%400==0 || (year%4==0 && year%100!=0))
{
days_month[2]=29;
}
else
{
// 这句 else 必须加,否则当 2000 年修改闰月以后,2001 年还是会按照 2 月有 29 天来计算。
days_month[2]=28;
}
其次注意截止时间是2020年10月1日(含),在循环里要有 break 。
知识点
- 周的循环:所有需要约束周的都可以这样写。
// week 循环,从 0 到 6 ,0 代表周日
week=(week+1)%7;
- 月份数组需要根据闰年平年进行修改。