博客
关于我
【每日蓝桥】49、一七年省赛Java组真题“日期问题”
阅读量:102 次
发布时间:2019-02-26

本文共 3757 字,大约阅读时间需要 12 分钟。

你好呀,我是灰小猿,一个超会写bug的程序猿!

欢迎大家关注我的专栏“”,该专栏的主要作用是和大家分享近几年蓝桥杯省赛及决赛等真题,解析其中存在的算法思想、数据结构等内容,帮助大家学习到更多的知识和技术!

标题:日期问题

小明正在整理一批历史文献.这些历史文献中出现了很多日期.小明知道这些日期都在1960

年1月1日至2059年12月31日.令小明头疼的是,这些日期采用的格式非常不统- -,有

采用年/月/日的,有采用月1日/年的,还有采用8/月/年的.更加麻烦的是,年份也都省略了

前两位,使得文献上的-一个日期,存在很多可能的日期与其对应.

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

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

输入:

一个日期,格式是"AA/BB/CC". (0<≈=A,B,C<= 9)

输入:

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

列.

 

样例输人

02/03/04

样例输出

2002-03-04

2004-02-03

2004-03-02

 

【资源约定】

峰值内存消耗(含虚拟机) < 256M

CPU消耗< 1000ms,

请严格按要求输出,不要画蛇添足地打印类似:“ 请您输..”的多余内容.

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码.

不要使用package语句.不要使用jdk1.7及以上版本的特性.

主类的名字必须是: Main, 否则按无效代码处理.

解题思路:

本题在进行求解的时候的步骤可以分为:

  1. 1对输入的字符串提取出三个时间数据
  2. 依次假设三个时间数据分别是年月日、月日年、日月年三种,
  3. 判断在每一种情况下,数据是否符合相应的要求,比如如果a数据表示日,则0<a<=31{同时还应该考虑是不是31天的月份},假设数据b是表示月,则0<b<=12,
  4. 考虑闰年中二月是29天,平年是28天
  5. 将符合要求的数据按照年月日组成一个整数,存入数组(注意去重)
  6. 将所有存入数组的数据进行排序
  7. 将排序后的日期按年-月-日格式输出

答案源码:

import java.util.Arrays;import java.util.HashSet;import java.util.Scanner;import java.util.Set;/**标题:日期问题小明正在整理一批历史文献.这些历史文献中出现了很多日期.小明知道这些日期都在1960年1月1日至2059年12月31日.令小明头疼的是,这些日期采用的格式非常不统- -,有采用年/月/日的,有采用月/日/年的,还有采用8/月/年的.更加麻烦的是,年份也都省略了前两位,使得文献上的-一个日期,存在很多可能的日期与其对应.比如02/03/04,可能是2002年03月04日.2004年02月03日或2004年03月02日.给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?输入:一个日期,格式是"AA/BB/CC". (0<≈=A,B,C<= 9)输入:输出若干个不相同的日期,每个日期一行,格式是"yyy-MM-dd".多个8期按从早到晚排列.*///1960年1月1日至2059年12月31日.//年/月/日的,有采用月/日/年的,还有采用日/月/年public class Year2017_Bt7 {	static Set
ansList = new HashSet
(); public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String time = scanner.next();// String time = "02/02/27"; String []strTimeArr = time.split("/"); int [] intTimeArr = new int[3]; for (int i = 0; i < strTimeArr.length; i++) { intTimeArr[i] = Integer.parseInt(strTimeArr[i]); } f(intTimeArr); Object[] ansArr = ansList.toArray(); Arrays.sort(ansArr); for (int i = 0; i < ansArr.length; i++) { String s = ansArr[i].toString(); System.out.println(s.substring(0, 4) + "-" + s.substring(4, 6) + "-" + s.substring(6, 8)); } } /** * 将存储时期的数组转换成具体的时间 * */ private static void f(int[] intTimeArr) {// 年月日 if (intTimeArr[1]<=12&&intTimeArr[1]>0&&intTimeArr[2]>0&&intTimeArr[2]<=31) { int m = intTimeArr[1]; int d = intTimeArr[2]; int y = 0;// 19年 if (intTimeArr[0]>=60) { y = 1900+intTimeArr[0]; }// 20年 else { y = 2000+intTimeArr[0]; } //判断如果不是闰年,且是二月,且天数大于29,则不符合要求,不做记录 if ((!isRun(y)&&m==2&&d>28)||(!check(m, d))) { }else { int ansNum = y*10000+m*100+d; ansList.add(ansNum); } }// 月日年 if (intTimeArr[0]<=12&&intTimeArr[0]>0&&intTimeArr[1]>0&&intTimeArr[1]<=31) { int m = intTimeArr[0]; int d = intTimeArr[1]; int y = 0;// 19年 if (intTimeArr[2]>=60) { y = 1900+intTimeArr[2]; }// 20年 else { y = 2000+intTimeArr[2]; } //判断如果不是闰年,且是二月,且天数大于29,则不符合要求,不做记录 if ((!isRun(y)&&m==2&&d>28)||(!check(m, d))) { }else { int ansNum = y*10000+m*100+d; ansList.add(ansNum); } }// 日月年 if (intTimeArr[0]<=31&&intTimeArr[0]>0&&intTimeArr[1]>0&&intTimeArr[1]<=12) { int m = intTimeArr[1]; int d = intTimeArr[0]; int y = 0;// 19年 if (intTimeArr[2]>=60) { y = 1900+intTimeArr[2]; }// 20年 else { y = 2000+intTimeArr[2]; } //判断如果不是闰年,且是二月,且天数大于29,则不符合要求,不做记录 if ((!isRun(y)&&m==2&&d>28)||(!check(m, d))) { }else { int ansNum = y*10000+m*100+d; ansList.add(ansNum); } } } /** * 判断是不是闰年 * */ private static boolean isRun(int y) { return (y%4==0&&y%100!=0)||(y%400==0); } /** * 判断在2,4,6,9,11月时,天数是不是31天 * */ private static boolean check(int m,int d) { if ((m==2||m==4||m==6||m==9||m==11)&&d>30) { return false; } return true; } }

输出样例:

其中有不足或者改进的地方,还希望小伙伴留言提出,一起学习!

感兴趣的小伙伴可以关注专栏!

灰小猿陪你一起进步!

转载地址:http://ydsk.baihongyu.com/

你可能感兴趣的文章
MySQL5.6忘记root密码(win平台)
查看>>
MySQL5.6的Linux安装shell脚本之二进制安装(一)
查看>>
MySQL5.6的zip包安装教程
查看>>
mysql5.7 for windows_MySQL 5.7 for Windows 解压缩版配置安装
查看>>
Webpack 基本环境搭建
查看>>
mysql5.7 安装版 表不能输入汉字解决方案
查看>>
MySQL5.7.18主从复制搭建(一主一从)
查看>>
MySQL5.7.19-win64安装启动
查看>>
mysql5.7.19安装图解_mysql5.7.19 winx64解压缩版安装配置教程
查看>>
MySQL5.7.37windows解压版的安装使用
查看>>
mysql5.7免费下载地址
查看>>
mysql5.7命令总结
查看>>
mysql5.7安装
查看>>
mysql5.7性能调优my.ini
查看>>
MySQL5.7新增Performance Schema表
查看>>
Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
查看>>
Webpack 之 basic chunk graph
查看>>
Mysql5.7版本单机版my.cnf配置文件
查看>>
mysql5.7的安装和Navicat的安装
查看>>
mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
查看>>