蓝桥杯真题——跑步锻炼(c语言)

目录

一、题目描述

二、解题思路

三、操作代码


一、题目描述

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

小蓝每天都锻炼身体。

正常情况下,小蓝每天跑 1 千米。如果某天是周一或者月初(1日),为了激励自己,小蓝要跑 2 千米。如果同时是周一或月初,小蓝也是跑 2千米。

小蓝跑步已经坚持了很长时间,从 2000 年 1 月 1日周六(含)到 2020年 10 月 1日周四(含)。请问这段时间小蓝总共跑步多少千米?

二、解题思路

1、周一或者月初或者同时当天比平常多跑一千米,那么编写代码时就要有判断周一或者月初或者同时出现(注意:同时是周一或月初也是跑2千米,而不是累加),然后注意年份这个特殊情况,因为闰年2月是29天,所以也要有判断是不是闰年的程序,

2、交代我的最初错误思路:我是先根据2000到2020所有天数,再减去2020年10月1日之后的,就是时间段以来的总天数,总天数再减1,再加3(因为我想开始是从周六结束是周四,额外添加值,满足7的整数),最后加上月数。运行错误,知道为什么吗?

因为忽略了同时是周一和月初还是多跑一千米的,,我最初的思路结果是同时时进行了累加

3、正确思路:首先判断年份是不是闰年,需要确定每年的2月份的天数,然后判断每个月每天是周几,如果是周一或者月初或者同时,跑的数目需要多加1,(因为开始是从周六,定义week=6,遇到第一个周一时,此时week=8,重新赋值week=1,再week++,这样就满足周一到周日的条件)

三、操作代码

#include
int main()
{
	int year_month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
	int weak=6,count=0;
	int year=0,day=0,month=0;
	for(year=2000;year<=2020;year++)
	{
		if(year%4==0&&year%100!=0||year%400==0)      //判断是不是闰年(两种条件:1、是4的倍数同时不是100的倍数,2、世纪年份,400的倍数)
		year_month[2]=29;
		else
		year_month[2]=28;
		for(month=1;month<=12;month++)
		{
			for(day=1;day<=year_month[month];day++)
			{
				count++;           //每天跑的一千米
				if(weak==8)
				weak=1;
				if(weak==1||day==1)
				count++;           //周一和月初或者同时多跑的一千米
				weak++;            //week=1是周一,周几随着天数继续++
		if(year==2020&&month==10&&day==1)         //结束条件
		printf("%d",count);
			}
		}
	}
	return 0;
}

运行结果是:8879

此题思路为自己理解,如有错误欢迎评论区指正!如果有更好的解法,留在评论区,共同学习!

你可能感兴趣的:(蓝桥杯真题,蓝桥杯,c语言)