1229. 日期问题

简介: 1229. 日期问题

题目链接

1229. 日期问题 - AcWing题库


一些话


切入点

// 小明知道这些日期都在1960年1月1日至2059年12月31日。

// 这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的

// 年份也都省略了前两位

// 多个日期按从早到晚排列。


// 读题可知以上四条日期要满足的情况,题目的切入点

流程

// 输出符合条件的情况,本质上和求符合条件情况的数量一样,所以这也是要用枚举的特征之一

// 要求满足多种性质的情况,首先要思考如何降低题目的复杂性,想下枚举什么可以直接满足更多的性质,枚举什么更加简单。

// 比如此题可以枚举合法日期,可以枚举日期区间内,可以枚举输入数据的不同排列。

// 如果枚举合法日期和日期区间内,再判断是否是输入数据的符合题意的排列的话就可以直接满足第四个性质,不需要储存数据然后再排序

// 枚举合法日期的难度较高,所以选择枚举日期区间内,然后再判断日期是否合法,是否符合排列比较简单

套路

日期类问题判断日期是否合法

int months[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
bool check(int year,int month,int day){
    if(!day || months[month] < day && month != 2) return false;
    if(!month || month > 12) return false;
    if(month == 2){
        if(day > 28 + (year % 100 && year % 4 == 0 || year % 400 == 0)) return false;
    }
    return true;
}

ac代码

// 8:03-8:17思路错误
//判断日期是否合法不熟
// 10:30~10:35;
// ~11:01accepted
// 11:02~11:10 wa1 && accepted
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
// 日期合法判断不够熟练
int months[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
bool check(int year,int month,int day){
    if(!day || months[month] < day && month != 2) return false;
    if(!month || month > 12) return false;
    if(month == 2){
        if(day > 28 + (year % 100 && year % 4 == 0 || year % 400 == 0)) return false;
    }
    return true;
}
int main(){
    int a,b,c;
    scanf("%d/%d/%d/",&a,&b,&c);//同航班时间的读取技巧
    for(int i = 19600101;i <= 20591231;i++){
        int year = i / 10000 % 100;
        int month = i % 10000 / 100;
        int day = i % 100;
        if(a == year && b == month && c == day && check(a,b,c) || a == month && b == day && c == year && check(c,a,b) || a == day && b == month && c == year && check(c,b,a))
            printf("%d-%02d-%02d\n",i / 10000,month,day);//同航班时间的前导0补齐输出
    }
    return 0;
}
目录
相关文章
|
JavaScript Java 大数据
转行程序员4年半,被裁了
转行程序员4年半,被裁了
226 2
|
Java Linux Shell
|
存储 区块链 数据安全/隐私保护
区块链会员系统开发功能搭建源码demo
以下是一个简单的区块链会员系统开发源码demo,包括区块链钱包、区块链溯源系统和智能合约:
|
机器学习/深度学习 存储 并行计算
【Pytorch神经网络理论篇】 27 图神经网络DGL库:简介+安装+卸载+数据集+PYG库+NetWorkx库
DGL库是由纽约大学和亚马逊联手推出的图神经网络框架,支持对异构图的处理,开源相关异构图神经网络的代码,在GCMC、RGCN等业内知名的模型实现上也取得了很好的效果。
2203 0
|
存储 Java
java equal和==的区别
java equal和==的区别
|
JavaScript
JS 页面前进、页面后退、页面跳转的方法
JS 页面前进、页面后退、页面跳转的方法
|
算法 C语言 C++
[c语言]二叉树 非递归算法(先中后遍历)
1.定义头文件加结构体变量 2.创建一棵树 3.初始化栈 4.头插法入栈 5.判断栈是否为空 6.出栈操作 7.先序遍历 8.中序遍历 9.后序遍历 10.主函数调用 11.运行结果:
260 1
|
监控 网络协议 安全
华为网络配置(ACL)
ACL概述、ACL简介、ACL分类、ACL组成、ACL匹配机制、ACL步长、ACL的匹配顺序、ACL应用场景、常见TCP/UDP端口号、ACL配置、案例、配置过程、测试
1021 0
 华为网络配置(ACL)
|
消息中间件 存储 搜索推荐
(十六)、SpringCloud Stream消息驱动
(十六)、SpringCloud Stream消息驱动
|
机器学习/深度学习 存储 数据库
Word报告自动生成(例如 导出数据库结构)(上)
将很早之前写的一个小组件重新整理优化一下,做成一个通用的功能。适用于导出数据库的结构(表、字段等)到Word或将体检数据自动生成Word版的体检报告等。
590 0
Word报告自动生成(例如 导出数据库结构)(上)