题目原意:求一矩阵中最大的2*2矩阵(元素和最大)的和。
样例输入:1 2 0 3 4;2 3 4 5 1; 1 1 5 3 0
样例输出:17
简析:此题目直接用暴力枚举即可,算法复杂度为O(n*m)。但题目难度在于如何从规定的输入流中获取这个矩阵。以下是我的代码:
#include<vector>
#include<iostream>
#include<utility>
using namespace std;
vector<vector<int> >matrix;
int inputOnLine(vector<int> &in)
{
char buf = 0;
int x;
while (1)
{
buf = getchar(); //取出输入流第一个字符
if ((buf != ';') && (buf != 10))
{
cin.putback(buf); //不是‘;’或者回车就放回输入流,因为这是矩阵的数据
cin >> x;
in.push_back(x);
}
else
break;
}
if (buf != ';')
return -1; //最后一行输入以回车键结束
else
return 0; //中间行以‘;’结束
}
int get2t2Sun(int r, int c)
{
return matrix[r][c] + matrix[r][c + 1] + matrix[r + 1][c] + matrix[r + 1][c + 1];
}
int main()
{
int row = 0, colnum = 0,sum=0,buf;
do
{
matrix.push_back(vector<int>());
colnum=inputOnLine(matrix[row++]);
} while (colnum != -1);
colnum = matrix[0].size();
for (int i = 0; i < row - 1; i++)
{
for (int j = 0; j < colnum - 1; j++)
{
buf = get2t2Sun(i, j);
if (sum < buf)
sum = buf;
}
}
cout << sum;
return 0;
}