2020年第十届C/C++ B组第二场蓝桥杯省赛真题(跑步锻炼)第4道

第四题:跑步锻炼
题目描述
小蓝每天都锻炼身体。正常情况下,小蓝每天跑1千米。如果某天是周一或者月初(1日),为了激励自己,小蓝要跑2千米。如果同时是周一或月初,小蓝也是跑2千米。小蓝跑步已经坚持了很长时间,从2000年1月1日周六(含)到2020年10月1日周四(含)。请问这段时间小蓝总共跑步多少千米?
题目分析
首先算出总的天数,和月份数,然后求出一共有多少个周一,和周一中为月份的天数
最后总天数+周一天数+月初天数 - 周一和月初重合天数
题目代码
 

#include<stdio.h>
int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
//先定义一个存储12个月分别天数的数组 ,开始 0是方便使用而定义的
//如从 1月几号,就是 0+当前天数; 
int is_leap(int year)//判断是否为闰年,若是返回1+28,否 返回0+28; 
{
	if(year%400==0||year%4==0&&year%100!=0)
	return 1;
	else return 0;
}
int get_day(int year,int month)//前面输入 具体年份,后面输入具体月份,
//返回结果是x年x月对应 天数 
{
	if(month==2) return 28+is_leap(year);
	return days[month];
}
int main()//3个for循环,第一个从年开始遍历
//第二个从月份开始遍历
//第三个从天数开始遍历 
{
int sum=0,ans=0;
for(int i=2000;i<=2019;i++)//从2000年1月份到第2019年第12月份 
{
	for(int j=1;j<=12;j++)
	{
		for(int k=1;k<=get_day(i,j);k++)
		//当遍历条件判断符合是该月第一天或者是星期一,则跑2千米 
		{
			int weekday=(sum+5)%7;
			//这个(sum+5) %7设计得很巧妙,是根据2000年1月1日是星期六得出来的  
			//相当于从星期一开始,每过7天就一循环,星期六=星期一+5天 
		//它可以通过(加某个数求余)具体判断出是星期几 
		//(仔细思考星期一到本周星期六,相差5天) 
			if(k==1||weekday==0)
			{
				ans=ans+2;//若符合条件,跑2千米 
			}
			
			else {ans++;}
			sum++;//每次累加总天数 
			
		}
	}
	}
	
	
	for(int j=1;j<=9;j++)//这里程序大致和上面步骤相同,只不过是从2020年的1月份到9月份 
	   {
	   	for(int k=1;k<=get_day(2020,j);k++)
	   	{
	   		int weekday=(sum+5)%7;
	   		if(k==1||weekday==0)
	   		  {
	   		  	ans=ans+2;
				 }
				 
				 else ans++;
				 sum++;
		   }
		   }
		   	
		   printf("总天数:%d\n   共计%d千米",sum,ans+2);//2020年10月1 并未计算,这里给它加2 
}

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值