蓝桥杯 --- 日期问题模板

目录

1.如何判断闰年

2.如何遍历当前年份的每一天

3.如果想要输出某一年某一天到某一年某一天之间一共有多少天。

4.精确到具体周几到周几的问题分析

5.如何直接通过一层for循环枚举年月日

习题:


蓝桥杯竞赛特别喜欢考日期问题,今天给大家分享一下日期题的一些解题模板。

1.如何判断闰年

bool judge(int year)
{
	if((year % 4 == 0 && year % 100!= 0) || year % 400 == 0)
	    return true;
	else  return false;
}

2.如何遍历当前年份的每一天

首先判断是否为闰年,其次定义一个数组来存储每个月份最多有多少天,并根据是否为闰年进行修改。

#include <iostream>
using namespace std;
bool judge(int year)
{
	if((year % 4 == 0 && year % 100!= 0) || year % 400 == 0)
	    return true;
	else  return false;
}	
int data[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
	int year;
	cin >> year;

	if(judge(year))
	    data[2] = 29;
	
	for(int month = 1;month <= 12;month++)
	{
		for(int day = 1;day <= data[month];day++)
		{
			//加入判定条件(根据题意来分析)
			//....
		}
	}
	return 0;
}

3.如果想要输出某一年某一天到某一年某一天之间一共有多少天。

如果想计算1921-07-23十二点 ~ 2020-07-01十二点之间共有多少天?

先将整年的加和,然后加零散的月份及天数。

#include <iostream>
using namespace std;
const int N = 1000;
int day[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int time;
int judge(int year)
{
	if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
	    return 366;
	return 365;
}
//1921-07-23 ~ 2020-07-01
int main()
{
	for(int i = 1922;i <= 2019;i++)
	{
		time += judge(i);
	}
	time += 10;
	for(int i = 1;i <= 12;i++)//这里因为七月份不完整,所以不单独计算
	{
		if(i == 7)  continue;//也可以直接自己算出除了七月的剩余天数,可以减少时间浪费
		time += day[i];
	}
	    
	cout << time << ' ';
	cout << time * 24 * 60;//输出共有多少秒
	return 0;
}

4.精确到具体周几到周几的问题分析

这里给大家带来蓝桥杯省赛---跑步训练

 对于星期问题,我们可以通过先设定开始星期mon = 6,然后再循环内部加入判定条件

if(mon == 8)  mon = 1;//如果mon++使mon到星期八,这时候让mon赋值为星期一
if(mon == 1 && data == 1)  sum += 2;//月初需要跑2km
else if(mon == 1 || data == 1)  sum += 2;//周一或者月初需要跑2km
else  sum += 1;			
if(i == 2020 && month == 10 && data == 1)//到达指定日期,直接输出并直接结束循环
{
	cout << sum;
	return 0;
}
mon++;

上面是判断星期的方式,无非就是注意星期八改成星期一,其他的部分照常利用年月日三重循环进行枚举 

#include <iostream>
using namespace std;
//2000-01-01(Saturday) ~ 2020-10-01(Thurday),其中某天周一或者月初(1日)要跑2km,其余时间跑1km
int day[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
bool judge(int year)
{
	if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
	    return true;
	return false;
}
int main()
{
    int sum = 0;
    int mon = 6;
	for(int i = 2000;i <= 2020;i++)
	{
		if(judge(i))  day[2] = 29;
		else  day[2] = 28;
		for(int month = 1;month <= 12;month++)
		{
			for(int data = 1;data <= day[month];data++)
			{
				if(mon == 8)  mon = 1;
				
				if(mon == 1 && data == 1)  sum += 2;
				else if(mon == 1 || data == 1)  sum += 2;
				else  sum += 1;
				
				if(i == 2020 && month == 10 && data == 1)
				{
					cout << sum;
					return 0;
				}
				mon++;
			}
		}
	}
}

5.如何直接通过一层for循环枚举年月日

这里就需要除法的运算:

for(int i = 19491001;i <= 20240413;i++)
{
    int year = i / 10000;
    int month = i % 10000 / 100;//也可以这样写:int month = i / 100 % 100;
    int day = i % 100;
    //...
}

习题:

这里给大家带来的是蓝桥杯C++B组题---日期统计

很明显,这题咱们只需要利用遍历月日,然后在其内部加入循环遍历数组找到其相同的日期。

#include <iostream>
using namespace std;
const int N = 1000;
int main()
{
    int array[100] = {
		        5, 6, 8, 6, 9, 1, 6, 1, 2, 4, 9, 1, 9, 8, 2, 3, 6, 4, 7, 7,
		        5, 9, 5, 0, 3, 8, 7, 5, 8, 1, 5, 8, 6, 1, 8, 3, 0, 3, 7, 9,
		        2, 7, 0, 5, 8, 8, 5, 7, 0, 9, 9, 1, 9, 4, 4, 6, 8, 6, 3, 3,
		        8, 5, 1, 6, 3, 4, 6, 7, 0, 7, 8, 2, 7, 6, 8, 9, 5, 6, 5, 6,
		        1, 4, 0, 1, 0, 0, 9, 4, 8, 0, 9, 1, 2, 8, 5, 0, 2, 5, 3, 3
		    };
    int daymonth[13] = {0 , 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31};	   
    int res = 0;
	for(int month = 1;month <= 12;month++)
	{
		for(int day = 1;day <= daymonth[month];day++)
		{
			int time[8] = {2 , 0 , 2 , 3 , month / 10 , month % 10 , day / 10 , day % 10};//这里可以利用数组记录当前枚举的年月日,以便于后面便利100数组找到相同日期
			int a = 0;
			for(int k = 0;k < 100;k++)
			{
				if(array[k] == time[a])
				{
					a++;
				}
				if(a == 8)
				{
					res++;
					break;
				}   
			}
		}
	} 
	cout << res << endl;
	return 0;
}

 好了,以上是我现已做过蓝桥杯有关日期问题的一些解题技巧,欢迎各位大佬分享自己的一些解题方法,感谢收看,记得三连支持。

相关推荐

  1. 日期问题纯暴力)

    2024-04-06 01:32:04       20 阅读
  2. Acwing2024日期问题

    2024-04-06 01:32:04       13 阅读
  3. C/C++日期问题

    2024-04-06 01:32:04       20 阅读
  4. 】(完全日期

    2024-04-06 01:32:04       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-06 01:32:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-06 01:32:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-06 01:32:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-06 01:32:04       20 阅读

热门阅读

  1. 第八章 贪心算法 part04

    2024-04-06 01:32:04       16 阅读
  2. xv6项目开源—05

    2024-04-06 01:32:04       15 阅读
  3. AI小程序的创业方向:深度思考与逻辑引领

    2024-04-06 01:32:04       15 阅读
  4. Redis实现全局唯一Id

    2024-04-06 01:32:04       16 阅读
  5. 蓝桥杯备考随手记: Scanner 类中常用方法

    2024-04-06 01:32:04       16 阅读
  6. 静态路由协议

    2024-04-06 01:32:04       12 阅读
  7. 全球化浪潮下的技术与安全

    2024-04-06 01:32:04       15 阅读
  8. 第九题:最大间隙

    2024-04-06 01:32:04       12 阅读