跑步锻炼(蓝桥杯题库)

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

小蓝每天都锻炼身体。

正常情况下,小蓝每天跑 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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值