输入样例:

02/03/04

输出样例:

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

解题思路:

可以顺着题意将三个数所有可能组成的情况枚举出来,并判断是否为合法的日期,将符合条件的保存至set,最后输出,其中年份有19开头的和20开头的均需枚举。

也可以逆向的在两个日期之间遍历,在合法日期的前提下找出符合三种格式的日期,即保证了有序,也不会有重复结果。

Java代码:(顺向)

import java.io.*;
import java.util.TreeSet;public class Main {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String[] split = br.readLine().split("/");int a = Integer.parseInt(split[0]);int b = Integer.parseInt(split[1]);int c = Integer.parseInt(split[2]);TreeSet<String> set = new TreeSet<>();//自动去重,排序if(isValid(a + 2000, b, c)){set.add(String.format("%d-%02d-%02d", a + 2000, b, c));}if(isValid(c + 2000, a, b)){set.add(String.format("%d-%02d-%02d", c + 2000, a, b));}if(isValid(c + 2000, b, a)){set.add(String.format("%d-%02d-%02d", c + 2000, b, a));}if(isValid(a + 1900, b, c)){set.add(String.format("%d-%02d-%02d", a + 1900, b, c));}if(isValid(c + 1900, a, b)){set.add(String.format("%d-%02d-%02d", c + 1900, a, b));}if(isValid(c + 1900, b, a)){set.add(String.format("%d-%02d-%02d", c + 1900, b, a));}for(String data : set) System.out.println(data);}public static boolean isValid(int y, int m, int d) {int []m1 = new int[] {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int []m2 = new int[] {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};if(m == 0 || m > 12) return false;if(y < 1960 || y > 2059) return false;if(isLeap(y)) if(d == 0 || d > m2[m]) return false;if(!isLeap(y)) if(d == 0 || d > m1[m]) return false;return true;}public static boolean isLeap(int y) {if(y % 400 == 0 || y % 4 == 0 && y % 100 != 0)return true;return false;}
}

Java代码:(逆向)

import java.io.*;public class Main {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String[] split = br.readLine().split("/");int a = Integer.parseInt(split[0]);int b = Integer.parseInt(split[1]);int c = Integer.parseInt(split[2]);for(int i = 19600101; i <= 20591231; i++) {int y = i / 10000, m = i % 10000 / 100, d = i % 100;if(isValid(y, m, d)) if(y % 100 == a && m == b && d == c || m == a && d == b && y % 100 == c || d == a && m ==b && y % 100 ==c)System.out.printf("%d-%02d-%02d\n", y, m, d);}}public static boolean isValid(int y, int m, int d) {int []m1 = new int[] {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int []m2 = new int[] {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};if(m == 0 || m > 12) return false;if(y < 1960 || y > 2059) return false;if(isLeap(y)) if(d == 0 || d > m2[m]) return false;if(!isLeap(y)) if(d == 0 || d > m1[m]) return false;return true;}public static boolean isLeap(int y) {if(y % 400 == 0 || y % 4 == 0 && y % 100 != 0)return true;return false;}
}

1229. 日期问题 Java题解 (枚举) 【第八届蓝桥杯省赛C++B组,JAVA B组】相关推荐

  1. 49-2017年第八届蓝桥杯国赛试题及详解(Java本科B组)

    蓝桥杯历年真题题目及题解目录汇总(推荐) 蓝桥杯算法模板常用套路及API等个人总结 ---------------------------------------------------------- ...

  2. 2022年十三届蓝桥杯国赛(C/C++大学B组)个人题解

    2022年十三届蓝桥杯国赛(C/C++大学B组)个人题解 更新:成绩出来了,估分50分左右,最后拿了个国二,还差点到国一,有点出乎意料,挺满意了挺满意了. 去年国赛基本都是暴力,最后国三都没拿到(我是 ...

  3. 第八届蓝桥杯省赛——青蛙跳杯子

    第八届蓝桥杯省赛--青蛙跳杯子 题目描述 XXX 星球的流行宠物是青蛙,一般有两种颜色:白色和黑色. XXX 星球的居民喜欢把它们放在一排茶杯里,这样可以观察它们跳来跳去. 如下图,有一排杯子,左边的 ...

  4. 2017年第八届蓝桥杯 - 省赛 - C/C++大学A组 - C. 魔方状态

    2017年第八届蓝桥杯 - 省赛 - C/C++大学A组 - C. 魔方状态 魔方状态 二阶魔方就是只有2层的魔方,只由8个小块组成. 小明很淘气,他只喜欢3种颜色,所有把家里的二阶魔方重新涂了颜色, ...

  5. 2017年第八届蓝桥杯省赛B组 C/C++

    2017.4.8,第八届蓝桥杯初赛,时隔一月多,才写个题解,贼尴尬...这学期竞赛多,PAT,天梯赛初决赛,蓝桥杯初决赛,ACM省赛,加上课程也多,真是累成狗了,蓝桥初赛后就一直学习课程,和小伙伴一起 ...

  6. 2017年第八届蓝桥杯省赛题目python解答(更新中)

    目录 1. 迷宫 2. 跳蚱蜢 3. 魔方状态 4. 方格分割 5. 正则表达式 6. 包子凑数 ·· 1. 迷宫 思路:使用暴力的方法来求解,对于每一个玩家,计算他能否走出去.对于一些走不出去的玩家 ...

  7. 填词游戏java_第八届蓝桥杯国赛 Java B组 第五题 填字母游戏(博弈论)

    解题思路: 因为是博弈论,所以我们要对先手的必胜态和必败态分析. 1.首先我们看赢遇到的状态,就是给出的串的子串有LO*,*OL,L*L这三种情况(就叫福利局吧~).都可以直接填出LOL,获胜. 2. ...

  8. 17年第八届蓝桥杯省赛(C语言B组) 题解

    最近 又从新做了一遍,主要是用代码实现.跑出答案... 1: 标题: 购物单 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞. ...

  9. 2017第八届蓝桥杯省赛JAVA C组真题解析(带源码及解析)

    蓝桥杯历年真题及解析. 目录: 蓝桥杯历年真题及解析. A:外星日历(难度:★) 题目: 分析: 代码: B:兴趣小组(难度:★) 题目: 分析: 代码: C:纸牌三角形(难度:★★★) 题目: 分析 ...

  10. 2017第八届蓝桥杯省赛c/c++本科B组试题总结及解题答案

    尊重原创,转载请注明出处:http://blog.csdn.net/y1196645376/article/details/69718192(有改动在末尾)(改动的地方是用的更容易理解的方法) 第一题 ...

最新文章

  1. 机器学习开源项目Top10
  2. 用python分析了30万条微博评论,毕业生与翟天临的爱恨情仇
  3. Chem. Commun. | 利用基于迁移学习策略的transformer 模型进行Heck反应预测
  4. h3c交换机限制端口访问_H3C交换机端口限速和流量监管典型配置指导
  5. 笔记-高项案例题-2019年下-质量管理-帕累托分析
  6. 英国电信公司沃达丰遭到网络攻击
  7. 开发者福音!面向Web场景的云开发服务正式开放!
  8. ExtJs + .NET MVC 不分页处理大数据
  9. Algorithm Data structure
  10. AV音响和HiFi音响有什么区别?
  11. Linux下的Latex安装和中文支持
  12. bat命令批量删除当前目录下指定格式之外的文件和文件夹
  13. 深入浅出设计模式(一):单例模式
  14. 【ubuntu如何录制gif图】
  15. python爬虫爬取视频
  16. 会话语义角色标注:Conversational Semantic Role Labeling
  17. Python | 基础学习(二)函数基础、非数字型变量(列表、元组、字典、字符串)、切片、for循环
  18. Hive错误之 Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask错误分析
  19. 机器学习之十大算法入门
  20. 电信互联网卡套餐一览表2020_2020网安周:中国电信全新思路应对移动互联网新威胁...

热门文章

  1. 如何选购便宜的SSL证书
  2. java 各种编码间转换
  3. 数理基础(概率论)------离散型和连续型分布期望方差公式
  4. java实现二维码扫码下载APP
  5. android竖屏固定,安卓教程:设置竖屏固定壁纸
  6. 西门子PLC——CANopen系统通信解决方案
  7. 求大神帮帮我,万分感谢,源码运行需要时间段,帮帮忙哈……
  8. Core Java笔记------来自达内项目经理穆笛
  9. node-red与西门子PLC通信
  10. 测试抑郁症的20道题(三)