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

慈云数据 8个月前 (03-12) 技术支持 121 0

目录

前言:

一、时间问题

二、使用步骤

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 
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon