题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝每天都锻炼身体。
正常情况下,小蓝每天跑 11 千米。如果某天是周一或者月初(11 日),为了激励自己,小蓝要跑 22 千米。如果同时是周一或月初,小蓝也是跑 22 千米。
小蓝跑步已经坚持了很长时间,从 20002000 年 11 月 11 日周六(含)到 20202020 年 1010 月 11 日周四(含)。请问这段时间小蓝总共跑步多少千米?
问题分析
我的思路是模拟日历中日期的增长与星期几的变化这样就能让电脑自动的计算总的里程,周一与月初跑2km其余跑1km,在到2020年10月1日计算过后就跳出循环,这样就能得到结果,需要注意的是闰年与非闰年的日期增长在2月是不同的,需要在其中加上一个是否为闰年的判断。
代码实现
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
//先模拟日期的增长,每一个日期对应了一个星期几,周一与月初跑两千米,其余日期跑一千米
int zhouji=6;//2000年1月1日是周六
int year=2000;
int month=1;//从1月1日开始计算
int day=1;
int sum=0;//跑步的总和
int M[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int flag=1;//2000年是闰年flag变量用来标记年份是否为闰年
//实现日历的翻页功能
while(1){
if(day==1||zhouji==1){//如果是周一或月初跑2km
sum+=2;
}else{//否则跑1km
sum+=1;
}
if(year==2020&&month==10&&day==1){//到2020年10月1日就结束了
break;
}
if(flag==1){//闰年
if(day<M[month]){//不到这一月的最后一天
day++;//天数加一
}else{//最后一天,进入下一月的第一天
day=1;
if(month<12){//同时月份也要增加,不到一年的最后一个月,月份加1
month++;
}else{//一年的最后一个月,进入下一年第一个月
month=1;
year++;//年份加一
if(year%4==0&&year%100!=0){//再次判断是否为闰年
flag=1;
}else if(year%400==0){
flag=1;
}else{
flag=0;
}
}
}
if(zhouji<7){//星期几也要增加
zhouji+=1;
}else{
zhouji=1;
}
}else{//同上,只不过这是非闰年的增长方法
if(day<m[month]){
day++;
}else{
day=1;
if(month<12){
month++;
}else{
month=1;
year++;
if(year%4==0&&year%100!=0){
flag=1;
}else if(year%400==0){
flag=1;
}else{
flag=0;
}
}
}
if(zhouji<7){
zhouji+=1;
}else{
zhouji=1;
}
}
}
printf("%d",sum);
return 0;
}