2020年蓝桥杯省赛C++c组 D.跑步锻炼 题型:日期类题目

112 阅读2分钟

1.跑步锻炼 - 蓝桥云课 (lanqiao.cn)

第一步:计算一下从2000年1月1日到2020年10月1日一共有多少天:

#include<bits/stdc++.h>
using  namespace std;
int day;
bool is_leap(int y)
{
	if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)return true;
	return false;
}
int main()
{
	int y = 2000, m = 1, d = 1;
	while (!(y == 2020 && m == 10 && d == 1))
	{
		d++;
		if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12)
		{
			if (d == 32)
			{
				m++;
				d = 1;
			}
		}
		if (m == 13)
		{
			y++;
			m =1;
			d = 1;
		}
		if (m == 4 || m==6 || m == 9 || m == 11)
		{
			if (d == 31)
			{
				m++;
				d = 1;
			}
		}
		if (is_leap(y) && m == 2)
		{
			if (d == 30)
			{
				m++;
				d = 1;
			}
		}
		if (!is_leap(y) && m == 2)
		{
			if (d == 29)
			{
				m++;
				d = 1;
			}
		}

		day++;
	}


	cout << "天数:"<<day<< endl;
	return 0;
}

image.png

验证

image.png

注意计算器计算的天数是不包含后面那个日期当天的,所以正确的天数应该+1。这里应该是7580.

验证

image.png 10月1号到10月4号应该是4天。

所以我们代码计算的结果也应该+1,是7580天。

image.png

image.png

第二步:对于周一和每月初一进行特殊处理


	int week_num = 6;  //2000.1.1是周六
        
        while()
        {
        
		week_num++;
		if (week_num == 8)week_num = 1;  //周八变周一

		if (week_num == 1 || d == 1)sum += 2;
                
        }

验证

题目已经说了2020.10.1是周四,我们程序结束后输出一下看week_num是否为周四即可:

image.png

最终代码====================================================

#include<bits/stdc++.h>
using  namespace std;
int day,sum;
bool is_leap(int y)
{
	if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)return true;
	return false;
}
int main()
{
	int y = 2000, m = 1, d = 1;

	int week_num = 6;  //2000.1.1是周六
	while (!(y == 2020 && m == 10 && d == 1))
	{	
		//这里一定要放在 week_num++ 前面,包含2000.1.1这个日期
		if (week_num == 1 || d == 1)sum += 2;  
		else sum += 1;


	    week_num++;
		if (week_num == 8)week_num = 1;  //周八变周一
		d++;

		
		if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12)
		{
			if (d == 32)
			{
				m++;
				d = 1;
			}
		}
		if (m == 13)
		{
			y++;
			m =1;
			d = 1;
		}
		if (m == 4 || m==6 || m == 9 || m == 11)
		{
			if (d == 31)
			{
				m++;
				d = 1;
			}
		}
		if (is_leap(y) && m == 2)
		{
			if (d == 30)
			{
				m++;
				d = 1;
			}
		}
		if (!is_leap(y) && m == 2)
		{
			if (d == 29)
			{
				m++;
				d = 1;
			}
		}

		day++;
	}


	cout << "天数:"<<day+1<< endl;

	cout << "最后那天是星期几:"<<week_num << endl;

	cout << "跑的里程数:" << sum+2 << endl;  //最后要+2,是因为没有包含2010.10.1
	return 0;
}

image.png