蓝桥回文日期
示例
輸入
20200202
輸出
20211202
21211212
在java中有一個類是LocalDate
LocalDate 是 Java8中新增的日期類,采用了系統的默認時區。可以方便的處理 日期對象 的 年、月、日 信息。有這個類在解決日期類問題比較方便。
下面常用的幾個常用API
不使用LocalDate類的另一種方法
1.首先要滿足回文的形式,即ABCDDCBA,對于回文的判斷用數組會方便許多。
2.ABABBABA型:此處也可以使用數組判斷是否是回文型。
3.要滿足日期的格式。
暴力求解思路:預先存儲好各個月份的天數。需要三個判斷方法:
a.判斷是否是閏年,如果是,則將存儲的二月份的天數改為29
b.判斷是否是回文型
c.判斷是否是ABAB型
通過三重for循環來尋找下一次回文日期。巧妙運用for循環的執行順序就可以實現從當前日期往后開始尋找。先增加天數,天數滿了增加月份,月份也滿了增加年份。要注意增加月份和年份時對應地要初始化天數和月份。通過兩個Boolean值來判斷是否找到我們的目標日期,當兩個Boolean值都為true時說明都找到了我們的目標日期,可以退出循環了。
import java.util.*; class Main{static boolean IsRun(int y) {if(y%400==0||(y%4==0&&y%100!=0)) return true;return false;}static boolean ABBA(String Str){//判斷回文日期char []str=Str.toCharArray();if(str[0]==str[7]&&str[1]==str[6]&&str[2]==str[5]&&str[3]==str[4]) return true;return false;}static boolean ABAB(String Str) {//判斷ABBA型char []str=Str.toCharArray();if(str[0]==str[2]&&str[2]==str[5]&&str[5]==str[7]&&str[1]==str[3]&&str[3]==str[4]&&str[4]==str[6]&&str[0]!=str[1]) return true;return false;}public static void main(String args[]) {int monthes[]={0,31,28,31,30,31,30,31,31,30,31,30,31};Scanner in=new Scanner(System.in);String time=in.next();Integer tt=Integer.parseInt(time);int year=tt/10000;int month=tt%10000/100;int day=tt%100+1;int n;int []ans=new int[2];boolean flag1=false,flag2=false;if(IsRun(year)) monthes[2]=29;for(int i=year;i<=9999;i++,month=1,day=1) {//巧妙運用for循環的順序,可以實現從當前日期開始往后尋找for(int j=month;j<=12;j++,day=1) {for(int k=day;k<=monthes[j];k++) {n=i*10000+j*100+k;String Str=String.valueOf(n);if(ABBA(Str)&&flag1==false) {String str1=Str;flag1=true;ans[0]=n;}if(ABAB(Str)&&flag2==false) {String str2=Str;flag2=true;ans[1]=n;}if(flag1==true&&flag2==true) break;}}}System.out.println(ans[0]);System.out.println(ans[1]);} }總結
- 上一篇: 安卓app开机自启动的几种方式
- 下一篇: android socket上传视频教程