博客
关于我
蓝桥杯31天冲刺打卡题解(Day2)
阅读量:796 次
发布时间:2023-03-25

本文共 3829 字,大约阅读时间需要 12 分钟。

2013蓝桥杯题解

第一题:暴力枚举

本题采用暴力枚举的方法,结合排序和循环标签的技巧,来解决问题。

方法思路

  • 枚举所有可能的6位数:从203891到987654范围内进行枚举。
  • 排序检查重复数字:将每个数字转换为字符数组,排序后检查是否有连续相同的字符。
  • 计算平方并检查回文:计算每个数字的平方,转换为字符数组后,检查是否与原数字字符数组相同。
  • 代码解析

    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);
    }
    }
    }

    第二题:模拟回文日期

    方法思路

  • 输入处理:从输入中读取日期并转换为整数。
  • 日期合法性检查:判断输入日期是否在合理范围内。
  • 回文检查:将日期转换为字符串,检查是否为回文。
  • AB型回文检查:检查日期是否为AB型回文,特定格式的回文日期。
  • 代码解析

    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;
    }
    }

    第三题:递推问题

    方法思路

  • 递推公式:f[i] = (f[i-1] + k) % i
  • 递推计算:从1到n依次计算f[i]的值。
  • 结果输出:输出f[n] + 1,因为编号从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);
    }
    }

    第四题:数学递推

    方法思路

  • 递推关系:f[i] = (f[i-1] + k) % i
  • 数组初始化:使用数组存储结果,避免重复计算。
  • 代码解析

    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/

    你可能感兴趣的文章
    Objective-C实现极小极大算法(附完整源码)
    查看>>
    Objective-C实现构造n以内的素数表(附完整源码)
    查看>>
    Objective-C实现某文件夹下文件重命名(附完整源码)
    查看>>
    Objective-C实现查找second Largest Element第二大元素算法(附完整源码)
    查看>>
    Objective-C实现查找整数数组中给定的最小数字算法(附完整源码)
    查看>>
    Objective-C实现查找给定节点数的树中可能的二叉搜索树的数量树算法(附完整源码)
    查看>>
    Objective-C实现查找链表的中间元素算法(附完整源码)
    查看>>
    Objective-C实现样条插值(附完整源码)
    查看>>
    Objective-C实现根据cpu和磁盘序列号生成注册码( 附完整源码)
    查看>>
    Objective-C实现格雷码序列算法(附完整源码)
    查看>>
    Objective-C实现桥接模式(附完整源码)
    查看>>
    Objective-C实现检查一个数字是否可以被另一个数字整除算法(附完整源码)
    查看>>
    Objective-C实现检查一年是否是闰年算法 (附完整源码)
    查看>>
    Objective-C实现检查三个点在 3D 中是否共线算法(附完整源码)
    查看>>
    Objective-C实现检查字符串是否包含字母表中所有字母的算法(附完整源码)
    查看>>
    Objective-C实现检查字符是否为字母算法(附完整源码)
    查看>>
    Objective-C实现检查数字是否为偶数算法(附完整源码)
    查看>>
    Objective-C实现检查数字是否为奇数算法(附完整源码)
    查看>>
    Objective-C实现检查给定图中是否存在循环算法(附完整源码)
    查看>>
    Objective-C实现检查给定字符串是否在camelCase中算法(附完整源码)
    查看>>