前言:
一、时间问题
1、考察小时,分以及秒的使用、
2、判断日期是否合法
3、遍历日期
4、推算星期几
总结
前言:
时间问题可以说是蓝桥杯,最喜欢考的问题了,因为时间问题不涉及到算法和一些复杂的知识,往往时间复杂度也不是很高,可以很好的考察学生的模拟和枚举思想,这类题目通常也可以巧用excel来帮助我们解决问题。近几年的考试考察难度也在增大。
一、时间问题
根据十年的题目考察,这种类型题目有难有简单,简单的甚至可以通过计算机中自带的excel和计算器来算,但是通常来投机取巧可以解决的不多,掌握代码模板多加练习才是王道 。
二、使用步骤
1、考察小时,分以及秒的使用、
如果考察到给你对应时间点,让你求差,不要多想就是化成统一的单位,然后求解。
题目:时间显示(2021年省赛)
代码
#include using namespace std; typedef long long LL; int h,m,s; int main() { LL n; cin >> n; n= n / 1000 % 86400; // 毫秒化秒,并且保留最后一天天数 h = n/3600; //求得最后一天的小时 n = n % 3600; m= n / 60; //分钟 s= n % 60; //秒数 printf("%02d:%02d:%02d",h,m,s); //02d的意思是如果不足俩位数,前补0 return 0; }
2、判断日期是否合法
这类题目比较经典的有回文日期和第八届蓝桥杯省赛C++B组的日期问题。这里就讲解一下日期问题这个题目
代码(重点是check_vaild函数里面的内容)
#include #include #include #include int days[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; bool check_vaild(int year,int month,int day) { if(month == 0 || month > 12) return false; if(day == 0) return false; if(month != 2) { if(day > days[month]) return false; } else{ int leap = year % 100 && year % 4 == 0 ||year % 400 == 0; if(day > leap + 28) return false; } return true; } using namespace std; int main() { int a,b,c; scanf("%d/%d/%d",&a,&b,&c); for(int date = 19600101;date 29) { month = 3; day = 1; } } else if(day > months[month] && month != 12) { day = 1; month ++; } else if(day > months[month] && month == 12) { day = 1; month = 1; year ++; } } cout