一、问题描述
小蓝每天都锻炼身体。
正常情况下,小蓝每天跑 1 千米。如果某天是周一或者月初(1 日),为了激励自己,小蓝要跑 2 千米。如果同时是周一或月初,小蓝也是跑 2 千米。
小蓝跑步已经坚持了很长时间,从 2000 年 1 月 1 日周六(含)到 2020 年 10 月 1 日周四(含)。请问这段时间小蓝总共跑步多少千米?
二、题目要求
考察
日期判断,数学思想 建议用时10~20min
三、问题分析
这道题和算法题每日一练---第5天:星系炸弹总体的思想差不多,多了一个限制条件。就是再编写代码的时候要对于月初和星期一的情况需要特殊处理判断,当这一天不是月初、不是星期一的情况,跑步天数只是增加一天。否则,跑步天数增加两天。
核心算法如下:
if(q!=1&&d!=1)//q代表星期几,d代表第几天{ sum+=1;//sum代表跑步天数,跑步天数加一} elsesum+=2;//否则,跑步天数加二
四、编码实现
usingnamespacestd; longlongintsum=0;//额外定义sum值 intmain() { inti,y=2000,m=1,d=1,q=6;//初始化定义年份、月份、天数 inta[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//12个月份的天数 while(1) { if(y==2020&&m==10&&d==1)//时间到了规定日期 { cout<<sum+2;//输出结果 exit(0);//退出程序 } d++;//天数加一 q++;//日期数加一 if(y%400==0||y%4==0&&y%100!=0)//满足闰年的要求 a[2]=29;//天数变成29 elsea[2]=28;//天数变成28 if(d>a[m])//天数大于当前月份 { d=1;//天数变为1 m++;//月份++ } if(m>12)//月份大于12 { m=1;//月份变为1 y++;//年份++ } if(q>7)//星期大于7 { q=1;//变为星期一 } if(q!=1&&d!=1)//不为星期一并且不为月份第一 { sum+=1; } elsesum+=2; } return0; }
五、输出结果
输出结果为:8879