在 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_no
和length
,结果应该是 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代码