科大讯飞笔试题9-17

科大讯飞这次笔试题还是出的比较用心,最后一题解方程没写出来
第一题:
加了一层padding去做
public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int M = sc.nextInt(), N = sc.nextInt(), K = sc.nextInt(), L = sc.nextInt();
        int[][] arr = new int[M+K/2*2][N+L/2*2];
        int[][] kernal = new int[K][L];


        int nM = M-K+K/2*2+1;
        int nN = N-L+L/2*2+1;
        int[][] res = new int[nM][nN];
        for (int i = K/2; i < K/2+M; i++) {
            for (int j = L/2; j < L/2+N; j++) {
                arr[i][j] = sc.nextInt();
            }
        }

        for (int i = 0; i < K; i++) {
            for (int j = 0; j < L; j++) {
                kernal[i][j] = sc.nextInt();
            }
        }
        for (int i = 0; i < M; i++) {
            for (int j = 0; j < N; j++) {
                res[i][j] = getRes(arr, kernal, i, j, K, L);
                if (res[i][j] > 255) res[i][j] = 255; if (res[i][j] < 0) res[i][j] = 0;    
                System.out.print(res[i][j] + " ");
            }
            System.out.println();
        }


    }

    private static int getRes(int[][] arr, int[][] kernal, int i, int j, int k, int l) {
        int sum = 0;
        for (int p = 0; p < k; p++) {
            for (int q = 0; q < l; q++) {
                sum += arr[i+p][j+q] * kernal[p][q];
            }
        }
        return sum;
    }        
第二题:
转化成最大岛屿
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int M = sc.nextInt(), N = sc.nextInt();
        int[][] old = new int[M][N];
        int[][] New = new int[M][N];
        int[][] map = new int[M][N];
        for (int i = 0; i < M; i++) {
            for (int j = 0; j < N; j++) {
                old[i][j] = sc.nextInt();
            }
        }
        for (int i = 0; i < M; i++) {
            for (int j = 0; j < N; j++) {
                New[i][j] = sc.nextInt();
            }
        }

        for (int i = 0; i < M; i++) {
            for (int j = 0; j < N; j++) {
                map[i][j] = New[i][j] - old[i][j] == 0 ? 1 : 0;
            }
        }

        int res = 0;
        int[][] orders = new int[][]{{0,1}, {1,0}, {0,-1}, {-1,0}};
        for (int i = 0; i < M; i++) {
            for (int j = 0; j < N; j++) {
                if (map[i][j] != 0) {
                    int t = dfs(i, j, map);
                    res = Math.max(res, t);
                }
            }
        }
        System.out.println(res);
    }

    static int cnt = 0;
    private static int dfs(int i, int j,  int[][] map) {
        if (i >= map.length || j >= map[0].length || i < 0 || j < 0) return 0;
        if (map[i][j] != 0) {
            map[i][j] = 0;
            return 1 + dfs(1+1, j, map) + dfs(i-1, j, map) + dfs(i, j+1, map) + dfs(i, j-1, map);
        }
        return 0;
    }

第三题:
解方程没写出来,有大佬写出来的求一个Java版本写法
#科大讯飞笔试#
全部评论
第三题写了个高斯消元写了半个多小时,最后总算是过了
1 回复 分享
发布于 2022-09-17 21:20 安徽
前两题ac了吗?我的做法和你差不多,但是第一题只能过50,第二题80,不知道是不是我写错了
点赞 回复 分享
发布于 2022-09-17 21:20 安徽

相关推荐

豆泥🍀:同26届,加油,我也还没找到查看图片
点赞 评论 收藏
分享
评论
点赞
5
分享

创作者周榜

更多
牛客网
牛客企业服务