第一部分 选择题:线性代数,排列组合,概率题,代码题判断题,Java语言基础题 第二部分 算法题三道,ACM模式,可用IDE 第一题 给N个杯子倒扣在桌面上,在第X个杯子中有一个球,移动杯子里面的球会跟着移动,经过K次移动,求最后那个球在第几个杯子中? 输入: 3 231 33 2 1 2输出 3(输入的意思是有3个杯子,球在第2个杯子中,经过三次移动,第一次移动为第一个与第三个杯子交换位置,第二次移动为第三个杯子与第二个杯子交换,第三次移动为第一个杯子与第二个杯子交换。最终输出3,意思为球最终在第三个杯子中) 我的代码:     public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        int N = sc.nextInt();        int X = sc.nextInt();        int K = sc.nextInt();        int[] cups = new int[N + 1];        cups[X] = 1;        for (int i = 0; i < K; i++) {            int cup1 = sc.nextInt();            int cup2 = sc.nextInt();            swap(cups,cup1,cup2);        }        for (int i = 1; i <= cups.length; i++) {            if (cups[i] == 1) {                System.out.println(i);                return;            }        }    }    private static void swap(int[] cups, int i, int j) {        int tmp = cups[i];        cups[i] = cups[j];        cups[j] = tmp;    } 第二题 有n个基站,我们还可以多设置k个基站,问我们怎么设置基站能够使噪音最小,返回最小噪音。 输入: 3 11 4 5意思为已经有三个基站,我们还可以再设置一个基站。那么目前噪音为max{4-1,5-4} = 3 那么我们在1和4之间建立基站2,那么噪音为max{2-1,4-2,5-4} = 2,那么最终返回2 输出 2我的想法是将这些基站位置放到int数组中,循环k次设置多出来的基站,每次我们寻找基站之间的距离最远的在其中间设置一个基站。这样k次之后得到噪音就是所求。 之前我一直纠结怎么存放数据,是不是要放到TreeMap中,之后想到用数组,然后排序一下就行了。 没时间提交了,也不知道对不对     static int n;    static int k;    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        n = sc.nextInt();        k = sc.nextInt();        int[] zhan = new int[n + k];        for (int i = 0; i < n; i++) {            zhan[i] = sc.nextInt();        }        int max = 0;        for (int i = 0; i <= k; i++) {            max = maxZao(zhan);        }        System.out.println(max);    }    private static int maxZao(int[] zhan) {        Arrays.sort(zhan);        int max = 0;        int index=0;        for (int i = 1; i < zhan.length; i++) {            if (zhan[i] - zhan[i - 1] > max) {                max = zhan[i] - zhan[i - 1];                index = i;            }        }        k--;        zhan[n++] = (zhan[index] - zhan[index - 1])/2;        return max;    } 第三题 给一个n*m的迷宫,'.'表示道路,'#'表示障碍,我们要从左上角走到右下角,走的过程中我们可以上下左右都能走(当然不能超出范围),我们可以将障碍变成道路,我们只能在道路上走,问我们最少需要将多少障碍变成道路才能从左上走到右下呢? 输入 3 3.###...#.输出 1我们将第二行第一列的障碍变成道路,就行了 输入 3 3.###.#.#.输出 2可以将第二行第一列和第三列变成道路 我不会做。。。因为它可以上下左右都能走,不是只能向下和向右,不会做,求大佬代码~ 我的代码栈溢出了。。。。。:cry:     public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        int n = sc.nextInt();        int m = sc.nextInt();        char[][] mi = new char[n][m];        sc.nextLine();        for (int i = 0; i < n; i++) {            String s = sc.nextLine();            for (int j = 0; j < s.length(); j++) {                mi[i][j] = s.charAt(j);            }        }        walk(mi, 0, 0, 0);    }    static int res = Integer.MAX_VALUE;    static int[][] dd = {{-1, 0}, {0, -1}, {1, 0}, {0, 1}};    public static void walk(char[][] mi, int i, int j, int barrier) {        if (i < 0 || j >= mi[0].length|| i >= mi.length || j < 0) {            return;        }        if (mi[i][j] == '#') {            barrier++;        }        if (i == mi.length && j == mi[0].length) {            res = Math.min(res, barrier);        }        for (int k = 0; k < dd.length; k++) {            int newX = i + dd[k][0];            int newY = j + dd[k][1];            walk(mi, newX, newY, barrier);        }    }
点赞 4
评论 6
全部评论

相关推荐

bg 为 985 本应届生,方向是嵌入式软件。纠结了很久,两边都不太了解,恳请各位大佬帮选,非常感谢🙏。
ResourceUtilization:求稳海能达,趁着年轻赚它一笔就relink吧,有个疑惑,怎么睿连同岗位多这么多base原因吗
点赞 评论 收藏
分享
04-10 11:56
如皋中学 Java
高斯林的信徒:双c9能简历挂的?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务