首页 > 微众银行 8-27 笔试全A JAVA
头像
plkij
编辑于 2021-08-28 11:25
+ 关注

微众银行 8-27 笔试全A JAVA

题目连接:
1.使用工具类进行循环计数
import java.util.Calendar;
import java.util.Scanner;

/*
大哥在直播的时候经常被粉丝刁难。
今天粉丝们在弹幕上问他的问题是:从公元a年1月到公元b年12月有多少个月份满足该月的第一天是星期一。
大哥不会数数,所以装作掉线后找到了你来帮他答题,请你以最快的速度帮帮他。
输入描述  两个正整数满足1900<=a<=b<=2100
输出描述  输出公元a年1月到公元b年12月有多少个月份满足该月的第一天是星期一。
样例输入  2021 2021 样例输出  3 提示  2021年1月1日是星期五。2021年的二月,三月和十一月都满足条件。
100%
*/

/**
 * @author poiuy
 */

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        int b = in.nextInt();
        int res = 0;
        for (int i = a; i <= b; i++) {
            res += help(i);
        }
        System.out.println(res);
    }

    public static int help(int year) {
        int res = 0;
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, year);
        for (int i = 0; i < 12; i++) {
            calendar.set(Calendar.MONTH, i);
            calendar.set(Calendar.DAY_OF_MONTH, 1);
            int day = calendar.get(Calendar.DAY_OF_WEEK);
            if (day == 2) {
                res++;
            }
        }

        return res;
    }
}
2.
1. 使用Deque记录所有结果,卡27%
2. 只记录每个节点的最大值和最小值,90%
3. 使用long 100%
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Scanner;


/*
第 i 行有 i 个数,位置居中对齐。
显然,除了最后一行的点,每个点的下方都有两个点与它相邻,本题并不是关于三角形数的问题,而是与这个性质有关。
给你若干个点,按照上图中的方式排列(保证排满,即点的个数是三角形数)。
你一开始位于第一行的点,身上带有一个数 1。
然后你要一行一行地往下走,每一步可以走到下方两个相邻点中的一个,走 n-1 步可到达终点(底部)。
除了第一行的点以外,每个点上带有一个效果,它可能是如下几种中的一种:
+ x:使你身上的数加 x
- x:使你身上的数减 x
/ x:使你身上的数除以 x,向远离0的方向取整,正数向上,负数向下
s:如果的身上的数为正数,则开平方根,向上取整。如果为负数,则取相反数,进行如上操作,再取相反数,如 8 经过 s 操作为 3,-8 则变为 -3。
n:使你身上的数变为它的相反数,即乘 -1  显然,从起点到一个点的路径并不一定是唯一的,到这个点时身上的值也不一定唯一。你的任务是计算以最后一行的每个点为终点时,可能的最大值和最小值
输入描述  第一行一个正数 n,表示三角形的层数。(n <= 400)  后面 n*(n+1)-1 行,每行有 “+ x” “- x” “/ x” “s” “n” 中的一种,运算符和数之间有一个空格,作用详见问题描述,按从上到下,从左到右的顺序表示除第一行以外的各点上的效果。(0 < x <= 1000000000)
输出描述  两行,每行 n 个整数,用空格隔开。
第一行依次表示最后一行从左到右各点作为终点时的最大值。
第二行依次表示最后一行从左到右各点作为终点时的最小值。
样例输入  3  + 2  n  / 2  - 5  s   样例输出  2 -2 -1  2 -6 -1
100%
*/

/**
 * @author poiuy
 */
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        PrintWriter out = new PrintWriter(System.out);
        int n = Integer.parseInt(in.nextLine());
        if (n == 0) {
            System.out.println();
            System.out.println();
            return;
        }
        long[] resMax = new long[]{1};
        long[] resMin = new long[]{1};
        for (int i = 1; i < n; i++) {
            long[] resMax1 = new long[i + 1];
            long[] resMin1 = new long[i + 1];
            Arrays.fill(resMax1, Long.MIN_VALUE);
            Arrays.fill(resMin1, Long.MAX_VALUE);
            String[] strs = new String[i + 1];
            strs[0] = in.nextLine();
            for (int j = 1; j <= i; j++) {
                strs[j] = in.nextLine();

                long num1 = help(resMax[j - 1], strs[j - 1]);
                long num2 = help(resMin[j - 1], strs[j - 1]);
                resMax1[j - 1] = Math.max(Math.max(resMax1[j - 1], num1), num2);
                resMin1[j - 1] = Math.min(Math.min(resMin1[j - 1], num1), num2);

                num1 = help(resMax[j - 1], strs[j]);
                num2 = help(resMin[j - 1], strs[j]);
                resMax1[j] = Math.max(Math.max(resMax1[j], num1), num2);
                resMin1[j] = Math.min(Math.min(resMin1[j], num1), num2);
            }
            resMax = resMax1;
            resMin = resMin1;
        }
        for (int i = 0; i < resMax.length; i++) {
            if (i == resMax.length - 1) {
                out.println(resMax[i]);
            } else {
                out.print(resMax[i] + " ");
            }
        }
        for (int i = 0; i < resMin.length; i++) {
            if (i == resMin.length - 1) {
                out.println(resMin[i]);
            } else {
                out.print(resMin[i] + " ");
            }
        }
        out.flush();
        out.close();
    }

    public static long help(long num, String str) {
        if (str.equals("s")) {
            if (num < 0) {
                return (long) Math.ceil(Math.sqrt(num * -1)) * -1;
            } else {
                return (long) Math.ceil(Math.sqrt(num));
            }
        } else if (str.equals("n")) {
            return num * -1;
        } else {
            String[] strs = str.split("\\s");
            if (strs[0].equals("+")) {
                return num + Integer.parseInt(strs[1]);
            } else if (strs[0].equals("-")) {
                return num - Integer.parseInt(strs[1]);
            } else {
                if (num < 0) {
                    return (long) Math.floor(num / (Integer.parseInt(strs[1]) * 1.0));
                } else {
                    return (long) Math.ceil(num / (Integer.parseInt(strs[1]) * 1.0));
                }
            }
        }
    }
}

3. 排序数据,遍历即可
import java.util.Arrays;
import java.util.Scanner;

/*
6
1 3 3 3 4 4

100%
 */

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] nums = new int[n];
        for (int i = 0; i < n; i++) {
            nums[i] = in.nextInt();
        }
        Arrays.sort(nums);
        int idx = 0;
        int need = 1;
        while(idx < n) {
            if (nums[idx] >= need) {
                idx++;
                need++;
            }
            else {
                idx++;
            }
        }
        System.out.println(need);
    }
}




全部评论

(9) 回帖
加载中...
话题 回帖

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐