P8651 [蓝桥杯 2017 省 B] 日期问题---洛谷(题解)

这周周赛的题,我感觉我这题写的还是不错的,用到了上周周赛的口算题中别人题解的函数和最近了解substr还有去年天梯校赛有个日期检验的题,都有用到。

题目描述

小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在 1960 年 1 月 1 日至 2059 年 12 月 31 日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。

比如 02/03/04,可能是 2002 年 03 月 04 日、2004 年 02 月 03 日或 2004 年 03 月 02 日。

给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?

输入格式

一个日期,格式是 AA/BB/CC。(0≤�,�,�≤90≤A,B,C≤9)

输出格式

输出若干个不相同的日期,每个日期一行,格式是 yyyy-MM-dd。多个日期按从早到晚排列。

输入输出样例

输入 #1复制

02/03/04

输出 #1复制

2002-03-04  
2004-02-03  
2004-03-02  

想法:

首先是输入,我用了substr把年月日分开,然后分三种情况,年月日,日月年,月日年,分别把他们转换为数字,年的要处理一下,分为20年和19年。然后检验日期的正确性,正确的话就存在结构体数组中,再把数组排序。最后是输出,输出不能重复。我们就先把第一个输出来,然后从第二个开始循环,看当前的和上一个是否相同,不同就输出。这个输出方法还挺好用,我用了挺多次的。结构体也很好用,排序方便。本来我输出想用to_string函数弄成一个string然后整个输出的,但不会排序,就想到用结构体了。

代码:

#include<bits/stdc++.h>
using namespace std;
string a,b,c;
string d;
struct ty{
    int y,m,d;
}ans[5];
int Year(string n){//处理年份
    int num;
    if(n<="59"){
        num=20;
    }
    else num=19;
    for(int i=0;i<n.size();i++) num=num*10+(n[i]-'0');
    return num;
}
int tonum(string n){//字符串转数字
    int num=0;
    for(int i=0;i<n.size();i++) num=num*10+(n[i]-'0');
    return num;
}
int rn(int y){//闰年
    if(y%4==0&&y%100!=0||y%400==0) return 1;
    return 0;
}
int tdate(int yy,int mm,int dd){///检查日期正确性
    if(mm<1||dd<1||mm>12||dd>31) return 0;
    if(mm==1||mm==3||mm==5||mm==7||mm==8||mm==10||mm==12){
        if(dd<=31) return 1;
        else return 0;
    }
    if(mm==4||mm==6||mm==9||mm==11){
        if(dd<=30) return 1;
        else return 0;
    }
    if(rn(yy)){
        if(dd<=29) return 1;
        else return 0;
    }
    else {
        if(dd<=28) return 1;
        else return 0;
    }
}
bool cmp(ty a,ty b){
    if(a.y==b.y&&a.m==b.m) return a.d<b.d;
    if(a.y==b.y) return a.m<b.m ;
    return a.y <b.y ;
}
int main(){
    cin>>d;
    a=d.substr(0,2);
    b=d.substr(3,2);
    c=d.substr(6,2);
    int cnt=0;
    for(int i=0;i<3;i++){
        int y,m,d;
        if(i==0){//年月日 
            y=Year(a);
            m=tonum(b);
            d=tonum(c);
        }
        else if(i==1){
            y=Year(c);
            m=tonum(a);
            d=tonum(b);
        }
        else if(i==2){
            y=Year(c);
            m=tonum(b);
            d=tonum(a);
        }
        if(tdate(y,m,d)){
            ans[cnt++].y=y;
            ans[cnt-1].m=m;
            ans[cnt-1].d=d;
        }
    }
    sort(ans,ans+cnt,cmp);
    printf("%04d-%02d-%02d\n",ans[0].y,ans[0].m,ans[0].d);
    for(int i=1;i<cnt;i++){
        if(ans[i].d!=ans[i-1].d||ans[i].m!=ans[i-1].m||ans[i].y!=ans[i-1].y)
        printf("%04d-%02d-%02d\n",ans[i].y,ans[i].m,ans[i].d);
    }
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rust 语言中的泛型

在Rust中&#xff0c;泛型&#xff08;Generics&#xff09;是一种允许你编写与多种不同数据类型一起工作的代码的方式。Rust主要通过两种方式来支持泛型&#xff1a;使用泛型函数和泛型结构体。下面是一些使用Rust泛型的示例。 一、泛型函数示例 fn add<T>(x: T, y: T…

MIT6.5840(6.824)Lab2总结(Raft)

MIT6.5840&#xff08;原MIT6.824&#xff09;Lab2总结&#xff08;Raft&#xff09; 资源分享&#xff1a; 官网地址&#xff1a;http://nil.csail.mit.edu/6.5840/2023/ Raft论文地址&#xff1a;http://nil.csail.mit.edu/6.5840/2023/papers/raft-extended.pdf 官方学生…

学习笔记 反悔贪心

0.写在前面 好久没更了&#xff0c;这周是开学第一周 A C M ACM ACM队临时安排讲课任务&#xff0c;没人讲&#xff0c;我就揽下来这活了。前两天有一道 c f cf cf的 d i v 2 C div2C div2C用到了反悔贪心这个技巧&#xff0c;也不需要什么前置算法就可以学&#xff0c;所以我…

JAVA循环中标记的作用

在Java循环中标记的作用是为循环语句提供一个标识符&#xff0c;使得程序可以在循环嵌套时跳出指定的循环。它可以用于在内部循环中控制外部循环&#xff0c;或者在多个嵌套循环中控制跳出特定的循环块。 标记通常与break和continue语句一起使用。使用break语句配合标记可以跳…

CentOS上安装与配置Nginx

CentOS上安装与配置Nginx Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器&#xff0c;并在一个BSD-like协议下发行。以下是在CentOS系统上安装和配置Nginx的步骤。 &#x1f31f; 前言 欢迎来到我的小天地&#xff0c;这…

在深度学习中,时间、空间、通道三个维度是什么?

在深度学习中&#xff0c;时间、空间、通道三个维度是什么&#xff1f; 在深度学习中&#xff0c;时间、空间和通道是描述输入数据的三个主要维度。 空间维度&#xff08;Spatial Dimension&#xff09;&#xff1a; 指的是输入数据在空间中的排列方式。对于图像数据来说&…

Web Servlet

目录 1 简介2 创建Servlet项目并成功发布运行3 新加Servlet步骤4 Servlet项目练习5 Servlet运行原理6 操作 HTTP Request头的方法(部分方法示例)7 操作 HTTP Response头的方法(部分方法示例)8 两种重定向(页面跳转)方法9 Cookie9.1 Cookie工作原理9.2 cookie构成9.3 Servlet 操…

Java并发包中的ConcurrentLinkedQueue与LinkedBlockingQueue深度对比

Java并发包中的ConcurrentLinkedQueue与LinkedBlockingQueue深度对比 在Java的并发编程中&#xff0c;队列是一种非常重要的数据结构&#xff0c;它们提供了线程安全的数据共享方式。java.util.concurrent包中提供了多种并发队列&#xff0c;其中ConcurrentLinkedQueue和Linke…

c++中的lambda表达式

简介 & 用法 lambda表达式是c11引入的一个重要特性&#xff0c;基本语法如下 [捕获列表](形参列表) -> 返回类型 {// 函数体 }其中捕获列表和形参列表可以为空&#xff0c;返回值类型大部分情况下可以忽略不写。 lambda表达式的结构整体上和普通函数一样&#xff0c;特…

docker study

一些基本命令 查看构建的镜像列表&#xff1a; 使用以下命令查看已经构建的 Docker 镜像&#xff1a; docker images这将显示你本地计算机上的所有 Docker 镜像&#xff0c;找到你刚刚构建的镜像并记下它的名称和标签。 运行 Docker 容器&#xff1a; 使用以下命令运行 Docker…

力扣题库第6题:三数之和

题目内容&#xff1a; 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重…

axios的详细使用

目录 axios&#xff1a;现代前端开发的HTTP客户端王者 一、axios简介 二、axios的基本用法 1. 安装axios 2. 发起GET请求 3. 发起POST请求 三、axios的高级特性 1. 拦截器 2. 取消请求 3. 自动转换JSON数据 四、axios在前端开发中的应用 五、总结 axios&#xff1a…

【JS】判断是否安装了某个Chrome插件

前提 manifest.json 清单 下文均以manifest.json v3介绍。 因为Chrome官方文档中明确说明&#xff0c;v2已经弃用了。 ID 由于浏览器的安全策略&#xff0c;以下方法均在「已知扩展程序 ID」 的前提下才可实现。 获取扩展程序ID 进入扩展程序管理页&#xff0c;找到对应插…

Python基本数据类型之散列类型详解

前言&#xff1a; python的基本数据类型可以分为三类&#xff1a;数值类型、序列类型、散列类型&#xff0c;本文主要介绍散列类型。 一、散列类型 散列类型&#xff1a;内部元素无序&#xff0c;不能通过下标取值 1&#xff09;字典&#xff08;dict&#xff09;&#xff…

vscode中使用nvm安装node及创建vue3项目

使用vscode创建vue3项目 1。安装nvm Releases coreybutler/nvm-windows (github.com) 打开下载nvm.exe并安装 2。安装node.js 用管理员身份打开vscode&#xff0c;新建终端选择git bash&#xff0c;运行nvm list available选择lts版本&#xff0c;比如&#xff1a;16.16.…

【DIY】电子制作创意作品:有趣的激光竖琴

在上海世博会的伊朗馆&#xff0c;我看到了一架没有琴弦的竖琴&#xff0c;那是众多参观者公认的伊朗馆里最有趣的展品&#xff01;参观者只要伸手穿过那架通体黑色的竖琴&#xff0c;音调就会被“奏响”。没有琴弦怎么奏响&#xff1f;工作人员为我们揭示了秘密——他按了一下…

Spring Boot搭建入门

Spring Boot简介 Spring Boot是对Spring进行的高度封装&#xff0c;是对Spring应用开发的高度简化版&#xff0c;是Spring技术栈的综合整合&#xff0c;是J2EE的一站式解决方案。想要精通Spring Boot的前提是需要熟悉Spring整套技术栈原理与内容。 Spring Boot的优点&#xf…

背景虚拟化组件,透明模糊

问题当我们背景想要进行透明或者模糊处理的时候我们一般我们可以以通过 rgba 的第四个位置可以进行透明处理&#xff0c;但是模糊不行 需要懂得知识点&#xff0c;定位&#xff0c;属性加强&#xff0c;结构化&#xff0c;react 插槽 话不多说上代码 子组件 import logincs…

RN的父传子和子传父及方法调用(函数式组件)

在React Native中&#xff0c;父组件向子组件传递数据通常通过props实现&#xff0c;而子组件向父组件传递数据则通常通过回调函数实现。下面是一个简单的示例&#xff0c;演示了父组件向子组件传递数据和子组件向父组件传递数据的方法&#xff1a; 父传子 父组件 // ParentC…

指针篇章-(冒泡排序详解)

冒泡排序 图解 tmp图解 内容图解 每次循环的次数减少 for循环详解 冒泡排序是一种简单的排序算法&#xff0c;它重复地遍历要排序的数列&#xff0c; 一次比较两个元素&#xff0c;如果它们的顺序错误就把它们交换过来。 遍历数列的工作是重复地进行直到没有再需要交换&…