C++:
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <string>
#include <math.h>
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<vector<int>> arr(6);
for (int i = 0; i < 6; i++) {
arr[i].resize(6);
for (int j = 0; j < 6; j++) {
cin >> arr[i][j];
}
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
int sum = 0;
int Maximun = 0;
//1
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i != 1) {
sum += arr[i][j];
}
else if (i == 1 && j == 1) {
sum += arr[i][j];
}
}
}
Maximun = sum;
sum = 0;
//2
for (int i = 0; i < 3; i++) {
for (int j = 1; j < 4; j++) {
if (i != 1) {
sum += arr[i][j];
}
else if (i == 1 && j == 2) {
sum += arr[i][j];
}
}
}
if (sum > Maximun) {
Maximun = sum;
}
sum = 0;
//3
for (int i = 0; i < 3; i++) {
for (int j = 2; j < 5; j++) {
if (i != 1) {
sum += arr[i][j];
}
else if (i == 1 && j == 3) {
sum += arr[i][j];
}
}
}
if (sum > Maximun) {
Maximun = sum;
}
sum = 0;
//4
for (int i = 0; i < 3; i++) {
for (int j = 3; j < 6; j++) {
if (i != 1) {
sum += arr[i][j];
}
else if (i == 1 && j == 4) {
sum += arr[i][j];
}
}
}
if (sum > Maximun) {
Maximun = sum;
}
sum = 0;
//5
for (int i = 1; i < 4; i++) {
for (int j = 0; j < 3; j++) {
if (i != 2) {
sum += arr[i][j];
}
else if (i == 2 && j == 1) {
sum += arr[i][j];
}
}
}
if (sum > Maximun) {
Maximun = sum;
}
sum = 0;
//6
for (int i = 1; i < 4; i++) {
for (int j = 1; j < 4; j++) {
if (i != 2) {
sum += arr[i][j];
}
else if (i == 2 && j == 2) {
sum += arr[i][j];
}
}
}
if (sum > Maximun) {
Maximun = sum;
}
sum = 0;
//7
for (int i = 1; i < 4; i++) {
for (int j = 2; j < 5; j++) {
if (i != 2) {
sum += arr[i][j];
}
else if (i == 2 && j == 3) {
sum += arr[i][j];
}
}
}
if (sum > Maximun) {
Maximun = sum;
}
sum = 0;
//8
for (int i = 1; i < 4; i++) {
for (int j = 3; j < 6; j++) {
if (i != 2) {
sum += arr[i][j];
}
else if (i == 2 && j == 4) {
sum += arr[i][j];
}
}
}
if (sum > Maximun) {
Maximun = sum;
}
sum = 0;
//9
for (int i = 2; i < 5; i++) {
for (int j = 0; j < 3; j++) {
if (i != 3) {
sum += arr[i][j];
}
else if (i == 3 && j == 1) {
sum += arr[i][j];
}
}
}
if (sum > Maximun) {
Maximun = sum;
}
sum = 0;
//10
for (int i = 2; i < 5; i++) {
for (int j = 1; j < 4; j++) {
if (i != 3) {
sum += arr[i][j];
}
else if (i == 3 && j == 2) {
sum += arr[i][j];
}
}
}
if (sum > Maximun) {
Maximun = sum;
}
sum = 0;
//11
for (int i = 2; i < 5; i++) {
for (int j = 2; j < 5; j++) {
if (i != 3) {
sum += arr[i][j];
}
else if (i == 3 && j == 3) {
sum += arr[i][j];
}
}
}
if (sum > Maximun) {
Maximun = sum;
}
sum = 0;
//12
for (int i = 2; i < 5; i++) {
for (int j = 3; j < 6; j++) {
if (i != 3) {
sum += arr[i][j];
}
else if (i == 3 && j == 4) {
sum += arr[i][j];
}
}
}
if (sum > Maximun) {
Maximun = sum;
}
sum = 0;
//13
for (int i = 3; i < 6; i++) {
for (int j = 0; j < 3; j++) {
if (i != 4) {
sum += arr[i][j];
}
else if (i == 4 && j == 1) {
sum += arr[i][j];
}
}
}
if (sum > Maximun) {
Maximun = sum;
}
sum = 0;
//14
for (int i = 3; i < 6; i++) {
for (int j = 1; j < 4; j++) {
if (i != 4) {
sum += arr[i][j];
}
else if (i == 4 && j == 2) {
sum += arr[i][j];
}
}
}
if (sum > Maximun) {
Maximun = sum;
}
sum = 0;
//15
for (int i = 3; i < 6; i++) {
for (int j = 2; j < 5; j++) {
if (i != 4) {
sum += arr[i][j];
}
else if (i == 4 && j == 3) {
sum += arr[i][j];
}
}
}
if (sum > Maximun) {
Maximun = sum;
}
sum = 0;
//16
for (int i = 3; i < 6; i++) {
for (int j = 3; j < 6; j++) {
if (i != 4) {
sum += arr[i][j];
}
else if (i == 4 && j == 4) {
sum += arr[i][j];
}
}
}
if (sum > Maximun) {
Maximun = sum;
}
cout << Maximun << endl;
system("pause");
return 0;
}
Python:
#!/bin/python3
import math
import os
import random
import re
import sys
# the first func is not very good!but for this problem, it's good!
def sum_hourglass1(hourglass):
sum = 0
for i in range(len(hourglass)):
for j in range(len(hourglass)):
if i != 1: sum = sum + hourglass[i][j]
elif i == 1 and j == 1:
sum = sum + hourglass[i][j]
return sum
# the second func looks great! but not for this problem!
def sum_hourglass2(hourglass):
sum = 0
for i in hourglass:
for j in i:
sum += j
return sum
if __name__ == '__main__':
arr = []
hourglasses = []
hourglasses_tmp = []
hourglasses_tmp_min = []
for _ in range(6):
arr.append(list(map(int, input().rstrip().split())))
# print(arr)
# first get all hourglasses
# wast some time!may be not the best func.
for mm in range(4):
for ii in range(4):
for jj in range(mm, mm+3):
hourglasses_tmp_min=arr[jj][ii:ii+3]
hourglasses_tmp.append(hourglasses_tmp_min)
# print(hourglasses_tmp)
hourglasses_tmp_min=[]
hourglasses.append(hourglasses_tmp)
hourglasses_tmp=[]
# print(hourglasses)
# second sum every hourglass from hourglasses
# and append a list, and sort reverse=True, the first value=list[0] is you want.
sum_hourglasses_list = []
for hourglass in hourglasses:
sum_hourglasses_list.append(sum_hourglass1(hourglass))
sum_hourglasses_list.sort(reverse=True)
print(sum_hourglasses_list[0])
总结:
先对6*6的矩形进行3*3的遍历,生成16个小矩形,对每个3*3的矩形中的值进行求和运算,其中要取3*3矩阵中第二行中的值。
Python:
对6*6的矩形进行3*3的遍历,生成16个小矩形:
for mm in range(4):
for ii in range(4):
for jj in range(mm, mm+3):
hourglasses_tmp_min=arr[jj][ii:ii+3]
hourglasses_tmp.append(hourglasses_tmp_min)
# print(hourglasses_tmp)
hourglasses_tmp_min=[]
hourglasses.append(hourglasses_tmp)
hourglasses_tmp=[]