解题思路:
既要判断是否为合理日期(1960年1月1日至2059年12月31日,闰年2月有29天,平年2月28,大月31,小月30等),又要将日期从小到大排序,尤其是从小到大排 序,情况很复杂,很难考虑全面,所以可以考虑换个角度解题。既然日期在1960年1月1日至2059年12月31日范围内,可以从1960年1月1日(19600101)遍历到2059年12月31日(20591231),分别取出前四位作为年,中间两位作为月,最后两位作为日,判断这个日期是否是合法日期。如果是合法日期,再与输入的AA、BB、CC分别按照年月日、月日年、日月年三种方式比较,如果相等,则输出。
注意事项:
学会转换思路很重要,一种方法行不通,就想想这个题目是不是有什么规律可以帮助我们解题,想想换个思路会不会更简单。
参考代码:
import java.text.ParseException; /* 年/月/日、月/日/年、日/月/年 日期都在1960年1月1日至1999年12月31日 2000年1月1日到2059年12月31日 年份省略了前两位 */ import java.text.SimpleDateFormat; import java.util.Date; import java.util.*; public class Main{ public static int month[] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; public static boolean Check(int y,int m,int d) {//检查是否是合法日期 if(y<1960 || y>2059) return false; if(m<1 || m>12) return false; // 1.能被4整除而不能被100整除。2.能被100整除也能被400整除。 int flag=0; if(y%4==0&&y%100!=0 || y%400==0&&y%100==0) flag=1; //判断闰年 if(d<1 || d>month[m]+flag) return false; return true; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.next(); String s[] = str.split("/"); int A = Integer.parseInt(s[0]); int B = Integer.parseInt(s[1]); int C = Integer.parseInt(s[2]); for(int i=19600101;i<=20591231;i++) { int y=i/10000; int m=i%10000/100; int d=i%100; if(Check(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) { //日月年 String Year = String.valueOf(y); String Month = String.format("%2d",m).replace(" ","0"); //空位补0 String Day = String.format("%2d",d).replace(" ","0"); System.out.println(Year+"-"+Month+"-"+Day); } } } } }
0.0分
4 人评分
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:559 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:1175 |
C语言程序设计教程(第三版)课后习题9.10 (C语言代码)浏览:626 |
C二级辅导-同因查找 (C语言代码)浏览:625 |
计算质因子 (C++代码)浏览:1824 |
程序员的表白 (C语言代码)浏览:706 |
A+B for Input-Output Practice (V) (C语言代码)浏览:640 |
众数问题 (C语言代码)浏览:911 |
简单的a+b (C语言代码)浏览:661 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:592 |