当前位置: 首页 > news >正文

冲击蓝桥杯-时间问题(必考)

目录

前言:

一、时间问题

二、使用步骤

1、考察小时,分以及秒的使用、

2、判断日期是否合法

 3、遍历日期

 4、推算星期几

总结



前言

时间问题可以说是蓝桥杯,最喜欢考的问题了,因为时间问题不涉及到算法和一些复杂的知识,往往时间复杂度也不是很高,可以很好的考察学生的模拟和枚举思想,这类题目通常也可以巧用excel来帮助我们解决问题。近几年的考试考察难度也在增大。


一、时间问题

根据十年的题目考察,这种类型题目有难有简单,简单的甚至可以通过计算机中自带的excel和计算器来算,但是通常来投机取巧可以解决的不多,掌握代码模板多加练习才是王道 。


 

二、使用步骤

1、考察小时,分以及秒的使用、

如果考察到给你对应时间点,让你求差,不要多想就是化成统一的单位,然后求解。

题目:时间显示(2021年省赛)


 代码

#include<bits/stdc++.h>
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的意思是如果不足俩位数,前补0return 0;
}

 

 


2、判断日期是否合法

这类题目比较经典的有回文日期和第八届蓝桥杯省赛C++B组的日期问题。这里就讲解一下日期问题这个题目

 代码(重点是check_vaild函数里面的内容)

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstring>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 <= 20591231;date ++){int year = date / 10000;int month = date % 10000 / 100;int day = date % 100;if(check_vaild(year,month,day)){if(year % 100 == a && month == b && day == c ||  // 年月日month == a && day == b && year % 100 == c ||  // 月日年day == a && month == b && year % 100 == c)   // 日月年printf("%d-%02d-%02d\n",year,month,day);}}}

 

 3、遍历日期

这类题型要么是给你俩段时间,让你求过去了多场时间,第二种就是给你一段时间,求一段时间后日期是什么时候。

这种问题,特别是求一段时间是多久,虽然可以通过电脑中的计算器,算出来,但是往往考察不会这么简单,所掌握编程方法至关重要。

题目(2020省赛)

 

代码

#include <bits/stdc++.h>
using namespace std;
int months[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
// 2000/01/01 -- 2020/10/01;
int main()
{int year = 2000, month = 1,day = 1 ;int week = 6;int cnt = 0;while(true){cnt ++;if(week == 1 || day == 1){cnt ++;}if(year == 2020 && day == 1 && month == 10) break;day += 1;week = (week + 1) % 7;if (month == 2 && (year % 4 == 0 && year % 100|| year % 400 == 0)){if(day > 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 << cnt << endl;}

 4、推算星期几

在13年省赛就考到了类似的用法

这里除了简单的可以通过excel和计算器求,往往会遇到日期太久了,这里有个给定日期吗,专门·计算是星期几的方法——“基姆拉尔森计算公式

if(month<=2) month+=12,year--;
week = (year + year/4 + year/400 -year/100+2*month+3*(month+1)/5+day)%7;

周一到周六对应week的值为0 - 6

题目 

代码

#include <bits/stdc++.h>
using namespace std;
int main()
{int y,m = 12,d = 31,w;for(int i = 10;i <= 99;i ++){y = i * 100 + 99;w = (y+y/4+y/400-y/100+2*m+3*(m+1)/5+d)%7;if(w  == 6){cout << y << endl;}}return 0;}
//我这里直接遍历所有满足条件的日期,最后自己观察那个符合题目,本身要求就是一个填空题,省点力气了哈
//最终2299满足条件

总结

   距离蓝桥杯还有俩个星期,之前更新的文章已经有俩期了,感谢大家的支持,我会继续更新蓝桥杯知识的总结,希望大家都能在蓝桥杯中取得好成绩

http://www.lryc.cn/news/41694.html

相关文章:

  • 10个杀手级应用的Python自动化脚本
  • 2023​史上最全软件测试工程师常见的面试题总结​ 备战金三银四
  • 2023年全国最新安全员精选真题及答案29
  • 关系数据库的7个基本特征
  • 2023QT面试题总会
  • 【微信小程序】-- npm包总结 --- 基础篇完结(四十七)
  • Leetcode刷题之经典双指针问题
  • C语言学习之路--指针篇
  • 吃透Java面试题,建议收藏
  • 华为OD机试题,用 Java 解【最差产品奖】问题 | 含解题说明
  • Redis缓存优化
  • 少儿Python每日一题(23):楼梯问题
  • 【Leetcode】队列实现栈和栈实现队列
  • (一)Tomcat源码阅读:查看官网,厘清大概轮廓
  • 刷题记录(2023.3.14 - 2023.3.18)
  • http协议 - 笔记
  • 第十八天 Vue-前端工程化总结
  • python网上选课系统django-PyCharm
  • Java序列化与反序列化
  • 【网络】网络层协议——IP
  • 安装kubernetes
  • 三维点云转深度图
  • Qt音视频开发27-ffmpeg视频旋转显示
  • python例程:《彩图版飞机大战》程序
  • 【前端八股文】JavaScript系列:Set、Map、String常用属性方法
  • 跳跃-动态规划问题
  • Django笔记三十九之settings配置介绍
  • 【JavaSE】类和对象(中)
  • C语言例程:学生成绩管理程序
  • 完美日记母公司再度携手中国妇基会,以“创美人生”助力女性成长