hackerrank~对stdout没有回应〜(java)|| 2D阵列-Ds

时间:2018-02-04 06:51:51

标签: java data-structures

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

    }
}

2 个答案:

答案 0 :(得分:0)

知道了!

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

以上线投掷了ArrayIndexOutOfBoundsException。所以,

if (i < 4 & j < 4)

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

我的解决方案适用于7个案例中的5个案例 也许它不适用于-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

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

答案 1 :(得分:0)

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中的代码