蓝桥杯2020第十一届C语言B组省赛习题题解——习题D.跑步锻炼

每日刷题(九十七)

蓝桥杯第十一届C语言B组省赛习题D:跑步锻炼(10’)

在这里插入图片描述

思路:

首先设一个月份的数组,用来记录每个月的天数,然后考虑闰年平年对二月天数的影响。

因为题目问的是多少千米,那么普通天数1就相当于1千米,总和公式为:

2000.1.1~2020.10.1总天数 + 2000.1.1~2020.10.1中是月初但不是周一的天数 + 2000.1.1~2020.10.1中周一的天数

总天数很容易算,那么月初但不是周一的天数如何考虑呢?我们只要设一个判断条件if((截至目前的总天数 + 6) % 7 != 1)

有朋友就要问了,为什么是+6呢?

因为他说了2000.1.1是周六,就相当于原数从Sun开始整体向右移了六个单位,这样是不是更好理解了

接下来就是算周一的天数,我们不妨画个图
在这里插入图片描述
以上橙线包裹的是2000.1,我们不妨就针对2000.1,如何将它补齐整除7?那当然是减2加6,因此(sum - 2 + 6) / 7就是这么来的

详细C++代码:

#include<iostream>
using namespace std;
int sum = 0, s = 0;
int month[13]={
    
    0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
    
    
	for(int i = 2000; i < 2020; i++)
	{
    
    
		if(i % 4 == 0 && i % 100 != 0 || i % 400 == 0) 
		{
    
    
			month[2]++;				//闰年 
		}
		for(int i = 1; i <= 12;i++)
		{
    
    
			if((sum + 6) % 7 != 1)
			{
    
    
				s++;		//计算是月初且不是周一的日子 
			}
			sum += month[i];
				
		}
			if(month[2] == 29) 
			{
    
    
				month[2]--;
			}
	}
	month[2]++;
	//2020年的前9个月 
	for(int i = 1; i <= 9; i++)
	{
    
    
		if((sum + 6) % 7 != 1)
		{
    
    
			s++;			//计算是月初且不是周一的日子 
		}
		sum += month[i];
	}
	//加上2020.10.1日
	sum += 1;
	s++; 
	int z = sum + s + (sum - 2 + 6) / 7;
	cout << z << endl;
	return 0; 
}

运行结果:
在这里插入图片描述
所以答案是8879

如果喜欢我的文章,请记得三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持,下期更精彩!!!

猜你喜欢

转载自blog.csdn.net/qq_44631615/article/details/113834445