蓝桥杯——回文日期Java

蓝桥杯——回文日期Java_第1张图片
蓝桥杯——回文日期Java_第2张图片
AC

package 算法训练;
import java.util.Scanner;
public class 回文日期3 {
	public static void main(String []args) {
		Scanner in = new Scanner(System.in);
		int date = in.nextInt();
		int ans1 = 0,ans2 = 0;
		boolean flag = false;
        while (true) {
          //先让日期自增
            date = DateRun(date);
            //如果flag不为true,并且判断为回文数,获取回文数,令flag为true
            if (!flag && judge1(date)) {
                ans1 = date;
                flag = true;
            }
            //判断既为回文又为ABAB型
            if (judge1(date) && judge2(date)) {
                ans2 = date;
                break;
            }
        }
        System.out.println(ans1);
        System.out.println(ans2);
        in.close();
	}
	//判断是否为回文数
	public static boolean judge1(int date) {
//		System.out.println("我执行了回文方法");

		String str = String.valueOf(date);
		char arr[] = str.toCharArray();
		String dx = "";
		for(int i = str.length()-1; i >=0 ; i--) {
			 dx += String.valueOf(arr[i]);
		}
		if(dx.equals(String.valueOf(date))) {
			return true;
		}else {
			return false;
		}
	}
	//判断是否为ABAB型回文数
	public static boolean judge2(int date) {
//		System.out.println("我执行了ABAB方法");
		String str = String.valueOf(date);
		char[] num = str.toCharArray();
		if(num[0]==num[2]&&num[1]==num[3]) {
			return true;
		}else {
			return false;
		}
	}
	//日期的自增与判断方法
	public static int DateRun(int date) {
//		System.out.println("我执行了时间方法");
		int year = date/10000,month = (date/100)%100,day = date%100;
		day++;
			if(day>31) {
				day = 1;
				month++;
				if(month>12) {
					month=1;
					year++;
				}
			}
		return year*10000+month*100+day;
	}
}
//既然是回文日期就必须有日期的限制  例如月份不能大于12,天数不能大于31等
//一是判断回文数的技巧,既然是日期类的,则一定是八位数,可以先判断前四位,再判断后四位
//二是ABAB型,这个较简单,在判断前四位的基础上 A=A,B=B
//三是日期的判断,月份不能超多12 ,天数不能超过31,不同月份的天数判断

package 算法训练;
import java.util.Scanner;
public class 回文日期4 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        //定义最近回文数ans1 ABAB型回文数ans2
        int ans1 = 0, ans2 = 0;
        boolean flag = false;
        while (true) {
          //先让日期自增
            num = runTime(num);
            //如果flag不为true,并且判断为回文数,获取回文数,令flag为true
            if (!flag && judge(num)) {
                ans1 = num;
                flag = true;
            }
            //判断既为回文又为ABAB型
            if (judge(num) && judge2(num)) {
                ans2 = num;
                break;
            }
        }
        System.out.println(ans1);
        System.out.println(ans2);
        scanner.close();
    }
    //判断回文的方法,如果是回文数返回true
    public static boolean judge(int num) {
        String string = Integer.toString(num);
        StringBuffer stringBuffer = new StringBuffer(string.substring(4));
        if (string.startsWith(stringBuffer.reverse().toString())) {
            return true;
        }
        return false;
    }
    //判断ABAB型,如果是ABAB型返回true
    public static boolean judge2(int num) {
        String string = Integer.toString(num);
        if (string.charAt(0) == string.charAt(2) && string.charAt(1) == string.charAt(3)) {
            return true;
        }
        return false;
    }
    //时间自增,日期限制
    public static int runTime(int num) {
        int year = num/10000, month = (num/100)%100, day = num%100;
        day++;
        if(day > 31) {
            day = 1;
            month ++;
            if (month > 12) {
                month = 1;
                year++;
            }
        }
        return year*10000+month*100+day;
    }
}

你可能感兴趣的:(蓝桥杯,蓝桥杯,java)