蓝桥杯练习题——日期问题

1.日期差值

在这里插入图片描述

思路

分别计算从第一年到两个日期过了多少天,然后相减

#include<iostream>
#include<cmath>
using namespace std;
int a[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int x1, x2;

int f(int year, int month, int day){
    int res = 0;
    for(int y = 1; y < year; y++){
        if(y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) a[1] = 29;
        else a[1] = 28;
        for(int m = 1; m <= 12; m++){
            res += a[m - 1];
        }
    }
    if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) a[1] = 29;
    else a[1] = 28;
    for(int m = 1; m < month; m++){
        res += a[m - 1];
    }
    res += day;
    return res;
}

int main(){
    while(cin>>x1>>x2){
        int year1 = 0, month1 = 0, day1 = 0, year2 = 0, month2 = 0, day2 = 0;
        for(int i = 0; i < 2; i++){
            day1 = day1 + x1 % 10 * pow(10, i);
            day2 = day2 + x2 % 10 * pow(10, i);
            x1 /= 10, x2 /= 10;
        }
        for(int i = 0; i < 2; i++){
            month1 = month1 + x1 % 10 * pow(10, i);
            month2 = month2 + x2 % 10 * pow(10, i);
            x1 /= 10, x2 /= 10;
        }
        for(int i = 0; i < 4; i++){
            year1 = year1 + x1 % 10 * pow(10, i);
            year2 = year2 + x2 % 10 * pow(10, i);
            x1 /= 10, x2 /= 10;
        }
        //cout<<year1<<" "<<month1<<" "<<day1<<endl;
        int res1 = f(year1, month1, day1);
        int res2 = f(year2, month2, day2);
        cout<<abs(res1 - res2) + 1<<endl;
    }
    return 0;
}

// 或者简化
#include<iostream>
#include<cmath>
using namespace std;
int a[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int x1, x2;

int f(int year, int month, int day){
    int res = 0;
    for(int y = 1; y < year; y++){
        if(y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) a[1] = 29;
        else a[1] = 28;
        for(int m = 1; m <= 12; m++){
            res += a[m - 1];
        }
    }
    if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) a[1] = 29;
    else a[1] = 28;
    for(int m = 1; m < month; m++){
        res += a[m - 1];
    }
    res += day;
    return res;
}

int main(){
    int year1, month1, day1, year2, month2, day2;
    while(scanf("%04d%02d%02d", &year1, &month1, &day1) != -1){
        scanf("%04d%02d%02d", &year2, &month2, &day2);
        //cout<<year1<<" "<<month1<<" "<<day1<<endl;
        int res1 = f(year1, month1, day1);
        int res2 = f(year2, month2, day2);
        cout<<abs(res1 - res2) + 1<<endl;
    }
    return 0;
}

// 最简化
#include<iostream>
#include<cmath>
using namespace std;
int a[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int f1(int year){
    return (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0));
}

int f2(int year, int month){
    if(month == 2) return 28 + f1(year);
    else return a[month];
}

int f3(int year, int month, int day){
    int res = 0;
    for(int i = 1; i < year; i++) res += 365 + f1(i);
    for(int i = 1; i < month; i++) res += f2(year, i);
    res += day;
    return res;
}

int main(){
    int year1, month1, day1, year2, month2, day2;
    while(scanf("%04d%02d%02d", &year1, &month1, &day1) != -1){
        scanf("%04d%02d%02d", &year2, &month2, &day2);
        int res1 = f3(year1, month1, day1);
        int res2 = f3(year2, month2, day2);
        cout<<abs(res1 - res2) + 1<<endl;
    }
    return 0;
}

2.日期问题

在这里插入图片描述
在这里插入图片描述

思路

按顺序枚举年月日,判断每一种情况

#include<iostream>
using namespace std;
int a[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int check(int year, int month, int day){
    if(month == 0 || month > 12) return 0;
    if(day == 0) return 0;
    if(month == 2){
        int x = year % 400 == 0 || (year % 4 == 0 && year % 100);
        if(day > a[month] + x) return 0;
    }else{
        if(day > a[month]) return 0;
    }
    return 1;
}

int main(){
    int a, b, c;
    scanf("%2d/%2d/%2d", &a, &b, &c);
    int year, month, day;
    for(int i = 19600101; i <= 20591231; i++){
        year = i / 10000, month = i % 10000 / 100, day = i % 100;
        if(check(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)){  //日月年
                // 前导补 0
                printf("%d-%02d-%02d\n", year, month, day);
            }
        }
    }
    return 0;
}

3.回文日期

在这里插入图片描述

思路

1.枚举每年每月每日,超时
2.因为回文串对称,所以只需要枚举前四位,判断符不符合

// 超时
#include<iostream>
using namespace std;
int a[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int check1(int year, int month, int day){
    if(month == 0 || month > 12) return 0;
    if(day == 0) return 0;
    if(month == 2){
        int x = year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
        if(day > a[month] + x) return 0;
    }else{
        if(day > a[month]) return 0;
    }
    return 1;
}

int check2(int x){
    string s = to_string(x);
    for(int i = 0, j = s.size() - 1; i < j; i++, j--){
        if(s[i] != s[j]) return 0;
    }
    return 1;
}

int main(){
    int a, b;
    scanf("%d%d", &a, &b);
    int cnt = 0;
    for(int i = a; i <= b; i++){
        int year = i / 10000, month = i % 10000 / 100, day = i % 100;
        if(check1(year, month, day) && check2(i)) cnt++;
    }
    printf("%d", cnt);
    return 0;
}

// 用点脑子
#include<iostream>
using namespace std;
int a[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int date1, date2;

int check1(int year, int month, int day){
    if(month == 0 || month > 12) return 0;
    if(day == 0) return 0;
    if(month == 2){
        int x = year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
        if(day > a[month] + x) return 0;
    }else{
        if(day > a[month]) return 0;
    }
    return 1;
}

int check2(int x){
    if(x >= date1 && x <= date2) return 1;
    else return 0;
}

int main(){
    scanf("%d%d", &date1, &date2);
    int cnt = 0;
    int year, month, day;
    for(int i = 1000; i <= 9999; i++){
        int t = i, x = 0;
        for(int i = 0; i < 4; i++){
            x = x * 10 + t % 10;
            t /= 10;
        }
        year = i, month = x / 100, day = x % 100;
        if(check1(year, month, day) && check2(i * 10000 + x)) cnt++;
    }
    printf("%d", cnt);
    return 0;
}

4.日期计算

在这里插入图片描述
在这里插入图片描述

思路

累减每个月的天数,直到不够

#include<iostream>
using namespace std;
int a[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int main(){
    int y, d;
    cin>>y>>d;
    if(y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) a[2] = 29;
    int cnt = 1;
    while(d > a[cnt]){
        d -= a[cnt];
        cnt++;
    }
    cout<<cnt<<endl;
    cout<<d;
    return 0;
}

5.回文日期

在这里插入图片描述
在这里插入图片描述

思路

先判断回文,再判断 AB 型

#include<iostream>
#include<cstdio>
using namespace std;
int a[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

bool f1(int y){
    return y % 400 == 0 || (y % 4 == 0 && y % 100 != 0);
}

int f2(int y, int m){
    if(m == 2 && f1(y)) return 29;
    return a[m];
}

int main()
{
    int year, month, day;
    scanf("%04d%02d%02d", &year, &month, &day);
    bool flag = false;
    //每年只有一个回文日期  枚举年份
    for(int i = year; ; i++){
        //构造回文日期
        int x = i, res = 0;
        while(x){
            res = res * 10 + x % 10;
            x /= 10;
        }
        res += i * 10000;

        //判断合法性
        if(i == year && res <= year * 10000 + month * 100 + day) continue;
        int m = res % 10000 / 100, d = res % 100;
        if(m >= 1 && m <= 12 && d >= 1 && d <= f2(i, m)){
            if(!flag)
            {
                printf("%04d%02d%02d\n", i, m, d);
                flag = true;
            }
            if(m == d && d % 10 != d / 10)
            {
                printf("%04d%02d%02d\n", i, m, d);
                break;
            }
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/471165.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【爬虫】专栏文章索引

为了方便 快速定位 和 便于文章间的相互引用等 作为一个快速准确的导航工具 爬虫 目录&#xff1a; &#xff08;一&#xff09;web自动化和接口自动化 &#xff08;二&#xff09;实战-爬取Boss直聘信息数据

HTML静态网页成品作业(HTML+CSS)——非遗徽州木雕网页(6个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有6个页面。 二、作品演示 三、代…

python利用openpyxl库操作Excel来读取、修改、写入测试数据

一、openpyxl模块介绍 1、openpyxl是读写Excel的python库&#xff0c;是一个比较综合的工具&#xff0c;能够同时读取和修改Excel文档 2、openpyxl中有三个不同层次的类,每一个类都有各自的属性和方法&#xff1a; Workbook是一个excel工作表 Worksheet是工作表中的表…

Android Studio实现内容丰富的安卓医院医生招聘平台

获取源码请点击文章末尾QQ名片联系&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动 项目编号120 1.开发环境android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.查看公告 3.查看职位列表 4.收藏功能&#xff0c; 5.投递…

Java基础学习笔记二

Java的加载与执行 Java既是编译型语言又是解释型语言 question&#xff1a;为什么JVM可以跨平台执行 answer &#xff1a; Java虚拟机&#xff08;JVM&#xff09;之所以能够跨平台执行&#xff0c;是因为它在不同操作系统上提供了一个统一的运行环境&#xff0c;实现了Java程…

web前端之不一样的下拉菜单、不选中第一个元素的样式效果、伪类排除第一个元素、符号选择器、hover、not、first、child

MENU 效果图htmlcssJShtmlcss 效果图 htmlcssJS html <nav><ul><li class"navli"><h4>HTML5</h4><ul class"ulson"><li class"lison">HTML5</li></ul></li><li class"na…

Vue+Element-UI Table表格实现复选框单选效果(隐藏表头上的全选Checkbox)

实现效果 完整代码 <div class"box-pos"><el-table ref"table" :header-cell-style"{ color: #FFF, background: #333 }":cell-style"{ color: #FFF, background: #333 }" :data"grListData" style"width: 1…

Hack The Box-Devvortex

目录 信息收集 nmap whatweb WEB web信息收集 wfuzz 漏洞探索 漏洞发现 反弹shell 提权 get user hashcat get root 信息收集 nmap 端口信息收集┌──(root?ru)-[~/kali/hackthebox] └─# nmap -p- 10.10.11.242 --min-rate 10000 Starting Nmap 7…

基于华为ensp的企业网络规划(新版)

第一章 项目概述 1.1 项目总体描述 假设某大型公司总部在北京、在重庆设置分部&#xff0c;总部和分部均有研发部、市场部、财务部等部门&#xff0c;现在要求进行网络规划与设计&#xff0c;实现分部和总部能够进行网络连通。为了保证数据安全&#xff0c;在总部和分部之间可…

全国各省市县统计年鉴/中国环境统计年鉴/中国工业企业数据库/中国专利数据库/污染排放数据库

统计年鉴是指以统计图表和分析说明为主&#xff0c;通过高度密集的统计数据来全面、系统、连续地记录年度经济、社会等各方面发展情况的大型工具书来获取统计数据资料。 统计年鉴是进行各项经济、社会研究的必要前提。而借助于统计年鉴&#xff0c;则是研究者常用的途径。目前国…

第二证券策略:股指预计维持震荡格局 关注消费、农牧饲渔等板块

第二证券指出&#xff0c;在前期高股息盈利板块和科技立异主题接连获得较好体现后&#xff0c;商场出现必定程度的“高切低”现象&#xff0c;首要体现是切换为轻视值和价值方向&#xff0c;中长期高股息盈利和科技立异主题仍是商场主线&#xff0c;3月份后半程关注医药生物、电…

Visual Studio 2013 - 高亮设置突出显示的引用

Visual Studio 2013 - 高亮设置突出显示的引用 1. 高亮设置 突出显示的引用References 1. 高亮设置 突出显示的引用 工具 -> 选项… -> 环境 -> 字体和颜色 References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

红外相机和RGB相机标定:实现两种模态数据融合

1. 前期准备 RGB相机&#xff1a;森云智能SG2-IMX390&#xff0c;1个红外相机&#xff1a;艾睿光电IR-Pilot 640X-32G&#xff0c;1个红外标定板&#xff1a;https://item.taobao.com/item.htm?_ujp3fdd12b99&id644506141871&spma1z09.2.0.0.5f822e8dKrxxYI 2.操作步…

NSS [SWPUCTF 2022 新生赛]ez_ez_unserialize

NSS [SWPUCTF 2022 新生赛]ez_ez_unserialize 开题&#xff0c;直接给了题目源码。 简单看了一下&#xff0c;题目告诉我们flag在哪&#xff0c;而且类中有高亮文件方法。怎么拿flag已经很明显了。关键点在于__weakup()魔术方法固定死了我们高亮的文件。所以这题只需要绕过__w…

基于51单片机的PWM波发生器两路互补调频脉宽

地址&#xff1a;https://pan.baidu.com/s/1VMr7X_aCmaMd8DeR7Q6OBw 提取码&#xff1a;1234 仿真图&#xff1a; 功能简介&#xff1a; 1、要求占空比和频率可调 2、占空比调节范围&#xff1a;0.1-0.9&#xff0c;频率调节范围0.5kHZ—3.0kHZ 3、使用4个按键调节&#xff0…

基于springboot+vue的智慧生活商城系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

基于Java中的SSM框架实现一汽租车共享平台系统项目【项目源码+论文说明】计算机毕业设计

基于Java中的SSM框架实现一汽租车共享平台系统演示 摘要 随着人们生活水平的不断提高&#xff0c;人们租车进行旅游的行为已成为大家的不二选择。汽车租赁服务被称为交通运输服务行新兴的服务行业&#xff0c;因为汽车租赁无须办理保险、无须年检维修、车型可随意更换等优点&a…

php基于人工智能预警突发疾病系统python-flask-django-nodejs

根据现实需要&#xff0c;此系统我们设计出一下功能&#xff0c;主要有以下功能模板。 前台功能&#xff1a;首页、医生、疾病知识、后台管理。 医生功能&#xff1a;首页、个人中心、咨询信息管理、疾病预警管理、高血压管理、糖尿病管理。 用户功能&#xff1a;首页、个人中心…

Python文字识别自动化处理库之pytesseract使用详解

概要 在当今数字化时代,文字识别技术扮演着越来越重要的角色。Python pytesseract 库是一个强大的工具,能够帮助开发者轻松实现图像中文字的识别。本文将深入探讨 pytesseract 库的原理、功能、使用方法以及实际应用场景,并提供丰富的示例代码,让读者更全面地了解这个工具…

重磅:Python 迎来多线程重大更新 no-GIL

“在 Python 中&#xff0c;GIL 将不复存在。对 AI 生态系统来说是巨大的胜利。”PyTorch 核心维护者 Dmytro Dzhulgakov 感慨地说道。 GIL 是什么&#xff1f;GIL 的全称是 Global Interpreter Lock&#xff08;全局解释器锁&#xff09;&#xff0c;这不仅是 Python 的特性…