校园二手书交易网站开发,网站建设 软件开发,原平新闻热点头条,企业网站建设品牌1、枚举所有数值进行日期判断
时间复杂度是o(n)的#xff0c;比较慢#xff0c;单实例能凑合用#xff0c;多实例的话时间复杂度有点高。
核心代码就是判断某个八位数能否表示一个日期。 static int[] month {0,31,28,31,30,31,30,31,31,30,31,30,31};static String a, b…1、枚举所有数值进行日期判断
时间复杂度是o(n)的比较慢单实例能凑合用多实例的话时间复杂度有点高。
核心代码就是判断某个八位数能否表示一个日期。 static int[] month {0,31,28,31,30,31,30,31,31,30,31,30,31};static String a, b; static void sovle() throws Exception {b br.readLine();int s 0;int l Integer.parseInt(a), r Integer.parseInt(b);for(int i l; i r; i ) if(check(i))s ;bw.write(s \n);}private static boolean check(int i) {int a i / 10000, b i / 100 % 100, c i % 100;if(b 1 || b 12 || c 1) return false;if(b 2 asd(a)) return c 29;return c month[b];}private static boolean asd(int a) {return a % 400 0 || a % 4 0 a % 100 ! 0;} public static void main(String args[]) throws Exception {
// int t Integer.parseInt(br.readLine());int t 1;while((a br.readLine()) ! null) {sovle();}bw.flush();bw.close();}
2、模拟日期的加法
时间复杂度为o(n)比第一个方法稍微快一点但是这里的n是合法日期的数量。 static int[] month {0, 31,28,31,30,31,30,31,31,30,31,30,31};static String a, b;static void sovle() throws Exception {b br.readLine();int s 0;int l Integer.parseInt(a), r Integer.parseInt(b);while(l r) {s ;l ne(l);}bw.write(s \n);}private static int ne(int i) {i i 1;int a i / 10000, b i / 100 % 100, c i % 100;if(b 2 asd(a)) {if(c 29) {b 3;c 1;}} else {if(c month[b]) {b ;c 1;}}if(b 13) {a ;b 1;}return a * 10000 b * 100 c;}private static boolean asd(int a) {return a % 400 0 || a % 4 0 a % 100 ! 0;}public static void main(String args[]) throws Exception {
// int t Integer.parseInt(br.readLine());int t 1;while((a br.readLine()) ! null) {sovle();}bw.flush();bw.close();}
3、枚举整年、整月
时间复杂度是 o(n),这里的n是年份最高才10000时间是最快的基本可以满足所有情况下的使用。 static int[] month {0, 31,28,31,30,31,30,31,31,30,31,30,31};static String a, b; static void sovle() throws Exception {b br.readLine();int s 0;int l Integer.parseInt(a), r Integer.parseInt(b);if(l r) {int a l;l r;r a;}s get(l, r);bw.write(s \n);}private static int get(int l, int r) {int s 0;int a1 l / 10000, b1 l / 100 % 100, c1 l % 100;int a2 r / 10000, b2 r / 100 % 100, c2 r % 100;for(int i a1; i a2; i ) {if(asd(i)) s 366;else s 365;}for(int i 1; i b2; i ) {s month[i];if(i 2 asd(a2)) s ;}s c2;for(int i 1; i b1; i ) {s - month[i];if(i 2 asd(a1)) s --;}s - c1;s 1;return s;}private static boolean asd(int a) {return a % 400 0 || a % 4 0 a % 100 ! 0;}public static void main(String args[]) throws Exception {
// int t Integer.parseInt(br.readLine());int t 1;while((a br.readLine()) ! null) {sovle();}bw.flush();bw.close();}