一、问题描述
小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。 比如02/03/04,可能是2002年03月04日、2004年02月03日或2004年03月02日。
给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?
[输入]
----
一个日期,格式是"AA/BB/CC"。 (0 <= A, B, C <= 9)
[输出]
----
输出若干个不相同的日期,每个日期一行,格式是"yyyy-MM-dd"。多个日期按从早到晚排列。
样例输入
----
02/03/04
样例输出
----
2002-03-04
2004-02-03
2004-03-02
资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。不要使用package语句。不要使用jdk1.7及以上版本的特性。主类的名字必须是:Main,否则按无效代码处理。
二、题目类型:编程大题
三、解题思路及代码
这道题我是用暴力破解方法写的代码。。。看起来很繁琐,但思路流程如下:
1、用 Scanner 的 next() 方法接收一个字符串,并用 String 的 split() 方法把 “/” 筛掉,然后转成 int[] ;
2、直接顺序判断是否符合年/月/日、月/日/年、日/月/年这三个格式,如果符号就把 int[] 数组中的数据转为以 “-” 连接的字符串,并加入 TreeSet 容器中;
3、用 Iterator 遍历输出 TreeSet 中的内容
1 import java.util.Iterator; 2 import java.util.Scanner; 3 import java.util.Set; 4 import java.util.TreeSet; 5 6 public class DateProblem { 7 8 public static void main(String[] args) { 9 Scanner input = new Scanner(System.in); 10 String s = input.next(); 11 String[] arr = s.split("/"); 12 int[] num = new int[arr.length]; 13 for (int i = 0; i < num.length; i++) { 14 num[i] = Integer.parseInt(arr[i]); 15 } 16 Set<String> set = new TreeSet<>(); 17 //判断是否满足年/月/日格式 18 if ((num[0] >= 0 && num[0] <= 60) && (num[1] >= 1 && num[1] <= 12) && (num[2] >= 1 && num[2] <= 31)) { 19 String str = null; 20 if (num[0] >= 60) { 21 str = "19" + arr[0] + "-" + arr[1] + "-" + arr[2]; 22 } else { 23 str = "20" + arr[0] + "-" + arr[1] + "-" + arr[2]; 24 } 25 set.add(str);//若满足则加入set中 26 } 27 //判断是否满足月/日/年格式 28 if ((num[0] >= 1 && num[0] <= 12) && (num[1] >= 1 && num[1] <= 31) && (num[2] >= 0 && num[2] <= 60)) { 29 String str = null; 30 if (num[2] >= 60) { 31 str = "19" + arr[2] + "-" + arr[0] + "-" + arr[1]; 32 } else { 33 str = "20" + arr[2] + "-" + arr[0] + "-" + arr[1]; 34 } 35 set.add(str); 36 } 37 //判断是否满足日/月/年格式 38 if ((num[0] >= 1 && num[0] <= 31) && (num[1] >= 1 && num[1] <= 12) && (num[2] >= 0 && num[2] <= 60)) { 39 String str = null; 40 if (num[2] >= 60) { 41 str = "19" + arr[2] + "-" + arr[1] + "-" + arr[0]; 42 } else { 43 str = "20" + arr[2] + "-" + arr[1] + "-" + arr[0]; 44 } 45 set.add(str); 46 } 47 //输出 48 Iterator<String> iter = set.iterator(); 49 while (iter.hasNext()) { 50 System.out.println(iter.next()); 51 } 52 } 53 }
四、反思与总结
自己对于集合框架的使用还不够熟练,有待加强!