黑客兰克 ~对标准输出没有回应~(Java) ||2D 阵列-D



在 6X6 矩阵中查找所有沙漏的总和并打印最大总和时出现问题。这是我的代码。这段代码有什么问题?

import java.util.*;
public class Solution {
    public static void main(String[] args) {
        int matrix[][] = new int[6][6];
        int result[] = new int[17];
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 6; j++) {
                matrix[i][j] = sc.nextInt();
            }
        }
        for (int i = 0; i < 17; i++) {
            result[i] = 0;
        }
        int k = 0;
        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 6; j++) {
                if (i <= 4 & j <= 4) {
                    result[k] = matrix[i][j] + matrix[i][j + 1] + matrix[i][j + 2] + matrix[i + 1][j + 1] + matrix[i + 2][j] + matrix[i + 2][j + 1] + matrix[i + 2][j + 2];
                    k++;
                }
            }
        }
        sc.close();
        int max_no = 0;
        for (int i = 0; i < 17; i++) {
            if (max_no < result[i]) {
                max_no = result[i];
            }
        }
        System.out.println(max_no);
    }
}

知道了!

if (i <= 4 & j <= 4)

上面的行扔了ArrayIndexOutOfBoundsException.所以

if (i < 4 & j < 4)

解决方案是正确的,但任何人都可以提供更优化和通用的解决方案吗?


我的解决方案适用于 5 种情况中的 7 种也许它不适用于 -ve 值。下面的输入给出了错误的答案

-1 -1 0 -9 -2 -2
-2 -1 -6 -8 -2 -5
-1 -1 -1 -2 -3 -4
-1 -9 -2 -4 -4 -5
-7 -3 -3 -2 -9 -9
-1 -3 -1 -2 -4 -5

我让代码工作。问题在于初始化结果的max_nolength,结果应该是 16 而不是 17,

int max_no = result[0]; //correct now will work for -ve numbers

正在等待优化的代码或其他解决方案...

process.stdin.resume();
process.stdin.setEncoding('ascii');
var input_stdin = "";
var input_stdin_array = "";
var input_currentline = 0;
process.stdin.on('data', function (data) {
    input_stdin += data;
});
process.stdin.on('end', function () {
    input_stdin_array = input_stdin.split("n");
    main();    
});
function readLine() {
    return input_stdin_array[input_currentline++];
}

function main() {
    var arr = [];
    for(arr_i = 0; arr_i < 6; arr_i++){
       arr[arr_i] = readLine().split(' ');
       arr[arr_i] = arr[arr_i].map(Number);
    }
    var sums = [];
    for (var x = 0; x < 6; x++) {
        for (var y = 0; y < 6; y++) {
            if (x + 2 < 6 && y + 2 < 6) {
                var firstLine = arr[x][y] + arr[x][y+1] + arr[x][y+2];
                var secondLine = arr[x+1][y+1];
                var thirdLine = arr[x+2][y] + arr[x+2][y+1] + arr[x+2][y+2];
                sums.push(parseInt(firstLine) + parseInt(secondLine) + parseInt(thirdLine));    
            }
        }
    }
    process.stdout.write(Math.max.apply(Math, sums) + '');
}

这是我的JS代码

最新更新