原题:欧拉计划11题
思路:首先用到方向数组,也就是对各个方向连续的四个数进行计算。然后对整个二维数组枚举,依次每个数的各个方向,计算找到最大值。**答案:**70600674
#include <iostream>
using namespace std;
int num[30][30];
//方向数组
//本来是需要枚举8个方向的,但是右下方向的连续乘积和后面某个数据的左上方向是相同的,故自诩枚举四个方向
int dirx[4] = {-1, 0, 1, 1};
int diry[4] = {1, 1, 1, 0};
int main() {
int ans = 0;
for(int i = 5; i < 25; i++) {
for(int j = 5; j < 25; j++) {
cin >> num[i][j];
}
}
for(int i = 5; i < 25; i++) {
for(int j = 5; j < 25; j++) { //i, j的双层循环:对数据进行枚举
for(int k = 0; k < 4; k++) { //对四个方向连续数进行计算
int temp = num[i][j];
for(int l = 1; l < 4; l++) { //求四个数据乘积,需要往前走三步
int x = i + dirx[k] * l;
int y = j + diry[k] * l;
temp *= num[x][y];
}
ans = max(ans, temp);
}
}
}
cout << ans << endl;
return 0;
}