本文共 3829 字,大约阅读时间需要 12 分钟。
本题采用暴力枚举的方法,结合排序和循环标签的技巧,来解决问题。
import java.util.Arrays;public class Main { public static void main(String[] args) { outer: // 循环标签 for (int i = 203891; i < 987654; i++) { String num = String.valueOf(i); char[] arr = num.toCharArray(); Arrays.sort(arr); for (int j = 0; j < arr.length - 1; j++) { if (arr[j] == arr[j + 1]) continue outer; } long i_pow = (long)i * i; String pow_number = String.valueOf(i_pow); char[] arr_pow = pow_number.toCharArray(); for (int j = 0; j < arr_pow.length; j++) { for (int k = 0; k < arr.length; k++) { if (arr_pow[j] == arr[k]) continue outer; } } System.out.print(i); } }} import java.util.Scanner;public class Main { static int[] days = new int[]{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int flag = 0; for (int date = n + 1; date <= 99999999; date++) { if (!check_valid(date)) continue; if (flag == 0 && check_palindrome(date)) { System.out.println(date); flag = 1; } if (check_AB(date)) { System.out.println(date); break; } } } private static boolean check_palindrome(int date) { String str = Integer.toString(date); StringBuffer sb = new StringBuffer(str.substring(4)); if (str.startsWith(sb.reverse().toString())) { return true; } return false; } private static boolean check_AB(int date) { String str = Integer.toString(date); char[] arr = str.toCharArray(); int a = str.charAt(0), b = str.charAt(1); if (a == b) return false; return arr[2] == a && arr[5] == a && arr[7] == a && arr[3] == b && arr[4] == b && arr[6] == b; } private static boolean check_valid(int date) { int year = date / 10000; int month = date % 10000 / 100; int day = date % 100; if (month == 0 || month > 12) return false; if (day == 0 || month != 2 && day > days[month]) return false; if (month == 2) { int leap = 0; if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) leap = 1; if (day > 28 + leap) return false; } return true; }} import java.util.Scanner;public class Main { static final int N = 1000010; static int[] f = new int[N]; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int k = sc.nextInt(); for (int i = 1; i <= n; i++) { f[i] = (f[i - 1] + k) % i; } System.out.print(f[n] + 1); }} import java.util.Scanner;public class Main { static final int N = 1000010; static int[] f = new int[N]; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int k = sc.nextInt(); for (int i = 1; i <= n; i++) { f[i] = (f[i - 1] + k) % i; } System.out.print(f[n] + 1); }} 以上是对各题的详细解答和代码解析。
转载地址:http://wkhfk.baihongyu.com/