題目描述
您會得到一個6*6的二維陣列,陣列元素可以排出類似一個沙漏的形狀,如:
a b c d e f g
舉例來說,如果我們在充滿0的陣列中填入幾個數字1,得到以下的陣列:
1 1 1 0 0 0 0 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
實際上,在上面的陣列中,觀察沙漏形狀的時候可以從最左上角往右或往下位移,右移之後看到的沙漏圖形如下:
1 1 1 1 1 0 1 0 0 1 0 0 1 1 1 1 1 0 1 0 0
沙漏數值為a+b+c+d+e+f+g。
左邊的沙漏,a,b,c,d,e,f,g皆為1,數值為7。
中間的沙漏,a,b,e,f為1,c,d,g為0,數值為4。
右邊的沙漏,a,e為1,b,c,d,f,g為0,數值為2。
在這個題目中,您必須要輸出陣列中最大的沙漏數值。
原題網址
輸入格式
輸入有6行,每行包含6個數字,用空格來分隔,每個數字的範圍在-9到9之間(包含-9和9)。
輸出格式
直接輸出結果。
範例輸入
1 1 1 0 0 0 0 1 0 0 0 0 1 1 1 0 0 0 0 0 2 4 4 0 0 0 0 2 0 0 0 0 1 2 4 0
範例輸出
19
額外解釋
最大的沙漏數值之形狀為:
2 4 4 2 1 2 4
解題概念
從最左上角開始,一路掃描到最右下角,計算出所有沙漏形狀的數值,將最大值儲存下來,最後再輸出最大的沙漏數值。
參考答案
import java.util.Scanner;
public class Solution {
public static void main(final String[] args) {
final Scanner sc = new Scanner(System.in);
final int[][] a = new int[6][6];
for (int i = 0; i < 6; ++i) {
a[i] = new int[6];
for (int j = 0; j < 6; ++j) {
a[i][j] = sc.nextInt();
}
}
int max = Integer.MIN_VALUE;
for (int i = 0; i < 4; ++i) {
for (int j = 0; j < 4; ++j) {
final int value = a[i][j] + a[i][j + 1] + a[i][j + 2] + a[i + 1][j + 1] + a[i + 2][j] + a[i + 2][j + 1] + a[i + 2][j + 2];
if (value > max) {
max = value;
}
}
}
System.out.println(max);
}
}