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

这篇具有很好参考价值的文章主要介绍了冲击蓝桥杯-时间问题(必考)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言:

一、时间问题

二、使用步骤

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

2、判断日期是否合法

 3、遍历日期

 4、推算星期几

总结



前言:

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


一、时间问题

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


 

二、使用步骤

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

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

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

蓝桥杯考excel吗,蓝桥杯,c++,算法,蓝桥杯


 代码

#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的意思是如果不足俩位数,前补0
    return 0;
}

 

 


2、判断日期是否合法

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

蓝桥杯考excel吗,蓝桥杯,c++,算法,蓝桥杯

 代码(重点是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省赛)

蓝桥杯考excel吗,蓝桥杯,c++,算法,蓝桥杯

 

代码

#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

题目 

蓝桥杯考excel吗,蓝桥杯,c++,算法,蓝桥杯

代码

#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满足条件

总结

   距离蓝桥杯还有俩个星期,之前更新的文章已经有俩期了,感谢大家的支持,我会继续更新蓝桥杯知识的总结,希望大家都能在蓝桥杯中取得好成绩文章来源地址https://www.toymoban.com/news/detail-783997.html

到了这里,关于冲击蓝桥杯-时间问题(必考)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 逢试必考的二分查找(算法村第九关青铜挑战)

    除法在计算机中效率很低,一般改用 x ,意思是二进制数的每个位右移 x 位。从十进制的角度看, x 是以 2 为底的指数,这个指数就是除数。 在 Java 中,位运算符 的优先级低于加法运算符 + ,所以需要使用括号来保证正确的优先级 迭代实现

    2024年01月22日
    浏览(38)
  • 【面试必考点】这一次带你彻底学会this的指向问题

    相信很多朋友和我一样,总是搞不清this的指向关系,由于没有硬性要求,所以又总是不想学习,经过两次面试后,笔者发现这个考点真是 面试官常考的点 , 大家静下心来一起学习这篇this的指向吧! 文章主体内容分为两块:this的指向以及如何改变this的指向 全局的this指向

    2024年02月13日
    浏览(38)
  • 【Matlab】基于粒子群优化算法优化BP神经网络的时间序列预测(Excel可直接替换数据)

    基于粒子群优化算法(Particle Swarm Optimization, PSO)优化BP神经网络的时间序列预测是一种结合了PSO和BP神经网络的方法,用于提高BP神经网络在时间序列预测任务中的性能。时间序列预测是指根据过去的时间序列数据,预测未来的时间序列值。BP神经网络是一种常用的前向人工神

    2024年02月15日
    浏览(50)
  • 2023 Android面试官 常问的问题以及答案(附最新的Android面试大厂必考174题 )

    已经2023了 但是计算机的寒冬还没有过去 ,但是我们程序员的热情不会被磨灭(有钱就干 越多越有劲)。在这个金三银四的季节 许多公司也发布了更多的招聘岗位 面试机会多了 那我们跟要把握住。以下分享一些面试题给大家,希望能帮到大家找一份好工作。 1.Android与服务

    2023年04月09日
    浏览(49)
  • 排序算法的时间复杂度存在下界问题

    对于几种常用的排序算法,无论是归并排序、快速排序、以及更加常见的冒泡排序等,这些排序算法的时间复杂度都是大于等于O(n*lg(n))的,而这些排序算法存在一个共同的行为,那就是这些算法在对元素进行排序的时候,都会进行同一个操作,也就是对数组中取出文件,然后

    2024年02月21日
    浏览(41)
  • TOP-K问题和向上调整算法和向下调整算法的时间复杂度问题的分析

    TOP-K问题:即求数据结合中前K个最大的元素或者最小的元素,一般情况下数据量都比较大 比如:专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等 对于Top-K问题,能想到的最简单直接的方式就是排序,但是:如果数据量非常大,排序就不太可取了(可能数据都不能一下

    2024年02月04日
    浏览(39)
  • 动态规划算法解决背包问题,算法分析与C语言代码实现,时间效率解析

    🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨,经典算法的解析✨都在这儿,欢迎大家前往订阅本专题,获取更多详细信息哦🎏🎏🎏 🪔本系列专栏 -  数据结构与算法_勾栏听曲_0 🍻欢迎大家  🏹  点赞👍  评论📨  收藏⭐️ 📌个人主

    2023年04月16日
    浏览(47)
  • [蓝桥杯]Excel题

    蓝桥杯的excel题是什么?很多小伙伴看到这个标题感觉很疑惑,蓝桥杯不是只有填空和代码题吗?excel题是什么玩意? 这里我来解释一下,由于蓝桥杯的比赛环境有一套自己的系统,没有像别的比赛限制那么大~~(没错,说的就是PTA)~~。 因此我们可以使用各种电脑自带的工具

    2024年02月01日
    浏览(28)
  • 【图论】中国邮递员问题、平面图上最大割问题的多项式时间算法

    中国邮递员问题(Chinese Postman Problem, CPP)是图论中的一个著名问题,它是在1960年由我国学者管梅谷首先提出并研究的。简单来说,就是问:一个邮递员从邮局出发,把一个城市的所有街道都至少走一遍,最后回到邮局,问怎样使他走的总路程最小?这个问题有许多现实的应

    2024年02月12日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包