在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);
}
}
答案 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_no
和length
应该是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中的代码