Raj*_*rma 6 java arrays multidimensional-array hourglass
我正在研究一个问题,我要在数组中的所有沙漏中打印最大的总和.你可以在这里找到有关问题的详细信息-
我尝试了什么:
public class Solution {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int arr[][] = new int[6][6];
for (int arr_i = 0; arr_i < 6; arr_i++) {
for (int arr_j = 0; arr_j < 6; arr_j++) {
arr[arr_i][arr_j] = in.nextInt();
}
}
int sum = 0;
int tmp_sum = 0;
for (int arr_i = 0; arr_i < 4; arr_i++) {
for (int arr_j = 0; arr_j < 4; arr_j++) {
if (arr[arr_i][arr_j] > 0) {
sum = sum + (arr[arr_i][arr_j]) + (arr[arr_i][arr_j + 1]) + (arr[arr_i][arr_j + 2]);
sum = sum + (arr[arr_i + 1][arr_j + 1]);
sum = sum + (arr[arr_i + 2][arr_j]) + (arr[arr_i + 2][arr_j + 1]) + (arr[arr_i + 2][arr_j + 2]);
if (tmp_sum < sum) {
tmp_sum = sum;
}
sum = 0;
}
}
}
System.out.println(tmp_sum);
}
}
Run Code Online (Sandbox Code Playgroud)
输入:
1 1 1 0 0 0
0 1 0 0 0 0
1 1 1 0 0 0
0 9 2 -4 -4 0
0 0 0 -2 0 0
0 0 -1 -2 -4 0
Run Code Online (Sandbox Code Playgroud)
输出:
12
Run Code Online (Sandbox Code Playgroud)
预期产出:
13
Run Code Online (Sandbox Code Playgroud)
我不知道我在哪里做错了.我无法理解为什么预期的输出13.根据问题中给出的描述应该是10.这是一个错误的问题还是我对此的理解是错误的?
And*_*eas 20
删除if (arr[arr_i][arr_j] > 0)声明.它阻止在第1行第0列找到答案,因为该单元格是0.
对代码的其他改进的评论:
如果最好的沙漏总和是-4什么?你应该初始化tmp_sum为Integer.MIN_VALUE.并命名maxSum,以更好地描述它的目的.
你不应该sum在循环之外定义.在第一次分配时声明它,然后您不必将其重置为0之后.
你的迭代器应该只是i和j.这些是整数迭代器的标准名称,并保持代码...更清晰.
如果你喜欢更长的名字,请使用row和col,因为这就是他们所代表的.
数组查找周围不需要括号.
为清楚起见,我格式化了下面的代码,以显示数组查找中的沙漏形状.
Scanner in = new Scanner(System.in);
int arr[][] = new int[6][6];
for (int i = 0; i < 6; i++){
for (int j = 0; j < 6; j++){
arr[i][j] = in.nextInt();
}
}
int maxSum = Integer.MIN_VALUE;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
int sum = arr[i ][j] + arr[i ][j + 1] + arr[i ][j + 2]
+ arr[i + 1][j + 1]
+ arr[i + 2][j] + arr[i + 2][j + 1] + arr[i + 2][j + 2];
if (maxSum < sum) {
maxSum = sum;
}
}
}
System.out.println(maxSum);
Run Code Online (Sandbox Code Playgroud)