返回一个二维整数数组中最大子数组的和
要求:
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; }
截图: