返回一个二维整数数组中最大子数组的和
要求:
1.输入一个二维整形数组,数组里有正数也有负数。
2.二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和。
3.求所有子数组的和的最大值,要求时间复杂度为O(n)。
合作过程:首先一人结合上次一维数组分析这次二维数组的设计思路:先求每一行最大子数的和,如然后比较最大和,一直到最后一行,然后开始编程;另一个人负责找错误,改错,和最后的测试。体会:我们体会到这个作业的设计思路和编程还有最后的测试都很重要,所以两人的贡献都是相当的,遇到问题我们会一起讨论或者询问别人。
代码:
运河桥 2018/10/21 16:37:25
#include <iostream.h>
int main()
{
int a[7][7];//定义一个3*6的二维数组
int max;
int s;//求和
int count;
int b[7][8];
cout<<"请输入二维数组(7*7)中的元素:"<<endl;
for(int i=0;i<7;i++)
{
for(int j=0;j<7;j++)
{
cin>>a[i][j];
}
}
for(i=0;i<7;i++)
{
count=0;
for(int j=0;j<7;j++)
{
s=0;
for(int l=0;l<7-j;l++)
{
s=s+a[i][j+l];
b[i][count+l]=s;
}
count=count+7-j;
}
}
//求最大数
max=b[0][0];
for(int j=0;j<8;j++)
{
for(i=0;i<7;i++)
{
s=0;
for(int r=0;r<7-i;r++)
{
s=s+b[r+i][j];
if(max<s)
{
max=s;
}
}
}
}
cout<<"最大子数组为:"<<max<<endl;
cout<<endl;
return 0;
}
截图:



浙公网安备 33010602011771号