我正在解决一个问题,我必须在阵列中所有沙漏中打印最大的金额。您可以找到有关问题here-的详细信息
我尝试了什么:
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);
}
}
输入:
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
输出:
12
预期输出:
13
截图:
我不知道我在哪里做错了。我不明白为什么预期的输出是
13
。根据问题中给出的描述,它应该是10
。这是一个错误的问题,还是我对此的理解是错误的? 最佳答案
删除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);