蓝桥杯十天冲刺-day1(日期问题)

日期问题

基础循环遍历模板

对于蓝桥杯所有的日期问题遍历,都可以使用的上

for(year=2000;year<=2022;year++)
for(month=1;month<=12;month++)
for(day=1;day<=31;day++)
{
	if(month==1||month=3||month==5||month==7||month==8||month==10||month=12);
	else if(month==2)
	{
		if((year%4==0&&year%100!=0)||(year%400==0))
		{
			if(day>29) break;
		}
		else{
			if(day>28) break;
		}
	}
	else{
		if(day>30) break;//其他月份30天
	}

给定日期问过多少天后日期是多少

星系炸弹 (蓝桥杯C++2015B组省赛)
在这里插入图片描述

题目思路

1.(第一层循环) i=1,一直往前进到1000天
2.year-年,month-月,day-日期
3.分析月份

  • 大月则满32天,则month+1,day=1
  • 小月则满31天,则month+1,day=1
  • 二月
    • 闰年则满30天,month+1,day=1
    • 不是闰年则满29天,month+1,day=1
      4.分析年份
      月满13,year+1,month=1
代码
#include<bits/stdc++.h>
using namespace std;

int m1[]={0,1,3,5,7,8,10,12};//m1数组存储大月
int m2[]={0,4,6,9,11};//m2存储小月

int main(){
	int year=2014,month=11,day=9;//给定日期
	for(int i=1;i<=1000;i++){//往后数1000天
	 	day++;//往后数,日期加1
		for(int j=1;j<=7;j++){
			if(month==m1[j]&&day==32){//大月且 天数满32天
				month++;//月份+1 
				day=1;//日期 归1 
				break; 
			}
		} 
		for(int j=1;j<=4;j++){
			if(month==m2[j]&&day==31){//小月 且 满31天,月份进1,day归1
				month++;
				day=1;//日期 归1 
				break;  
			}
		} 
		if(month==2) //二月判断是不是闰年 
		{
			if((year%4==0&&year%100!=0)||(year%400==0)){ //是闰年,闰年2月29天 
				if(day==30){
					month++;
					day=1;
				}
			}
			else{//不是闰年,二月28天
				if(day==29){
					month++;
					day=1;
				} 
			}
		}
		if(month==13){
		year++;
		month=1;
		}
	}

	cout<<year<<"-"<<month<<"-"<<day;
	
} 

在这里插入图片描述

日期与日期之间有多少天

第几天 (蓝桥杯C++2018B组省赛)
在这里插入图片描述

代码思路

在上面代码的基础加一层循环,一直循环到 year1year2,month1month2,day1==day2

#include<bits/stdc++.h>
using namespace std;

int m1[]={0,1,3,5,7,8,10,12};
int m2[]={0,2,4,6,11};

int main(){
	int num=1;//记天数
	int year1=2000,month1=1,day1=1;
	int year2=2000,month2=5,day2=4;
	while(1){
		num++;
		day1++;
		for(int j=0;j<=7;j++){
			if(month1==m1[j]&&day1==32){
				month1++;
				day1=1;
				break;
			}
		}
		for(int j=1;j<=4;j++){
			if(month1==m2[j]&&day1==31){
				month1++;
				day1=1;
				break;
			}
		}
		if(month1==2){
			if((year1%4==0&&year1%100!=0)||(year1%400==0)){
				if(day1==30){
					month1++;
					day1=1;
				}
			}else{
				if(day1==29){
					month1++;
					day1=1;
				}
			}
		}
		if(month1==13){
			year1++;
			month1=1;
		}
		if((year1==year2)&&(month1==month2)&&(day1==day2)){
			break;
		}
	} 
	cout<<num<<endl;
}
 

在这里插入图片描述

日期与分钟之间的转换

纪念日(蓝桥杯C/C++2020B组省赛第一场)
在这里插入图片描述
代码思路
把天数换成了分钟,其实只需要换算 把 num+±>num+=24*60

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值