专业建材网站建设,多少钱的英文,建设银行 钓鱼网站,国内做设计的网站有哪些目录
1.如何判断闰年
2.如何遍历当前年份的每一天
3.如果想要输出某一年某一天到某一年某一天之间一共有多少天。
4.精确到具体周几到周几的问题分析
5.如何直接通过一层for循环枚举年月日
习题#xff1a; 蓝桥杯竞赛特别喜欢考日期问题#xff0c;今天给大家分享一下…目录
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;//...
} 习题
这里给大家带来的是蓝桥杯CB组题---日期统计 很明显这题咱们只需要利用遍历月日然后在其内部加入循环遍历数组找到其相同的日期。
#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;
} 好了以上是我现已做过蓝桥杯有关日期问题的一些解题技巧欢迎各位大佬分享自己的一些解题方法感谢收看记得三连支持。