日期问题
基础循环遍历模板
对于蓝桥杯所有的日期问题遍历,都可以使用的上
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
- 不是闰年则满29天,month+1,day=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