软件工程课后作业:返回一个二维整数数组中最大子数组的和
题目:返回一个 二维整数 数组中最大子数组的和
要求:
1.输入一个二维整型数组,数组里包括正数和负数。
2.二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和。
3.求所有子数组的和的最大值。
设计思想: 将求二维整数数组中最大子数组的和演变成一维数组求最大子数组的和。
//1.首先确定最大子数组范围。
//2.把二维数组分成几组不同列的数组,演变成一维数组求和的方法。
//3.把分割的几个数组,用上节课一维数组求子数组之和最大值的方法求出子数组的最大值。
//4.利用for循环完成计算。
程序代码:
#include<iostream>
#include<stdlib.h>
using namespace std;
void main ()
{
int x,y,i,j,m=0;
cout<<"请输入数组的行:";
cin>>x;
cout<<"请输入数组的列:";
cin>>y;
int *A = new int[x*y];
cout<<"请按照行和列的格式输入一个数组:"<<endl;
for(i=0;i<x;i++)
{
for(j=0;j<y;j++)
{
cin>>A[i*y+j];
}
}
int sum[100]={0},MaxSum=A[0];
for(j=0;j<y;j++)
{
for(m=0;m<y;m++)
{ for(i=0;i<x;i++)
{
sum[i]=sum[i]+A[i*y+(m+j)];
}
int max=0;
for(i=0;i<x;i++)
{
if(max+sum[i]>sum[i])
{
max=max+sum[i];
}
else
{
max=sum[i];
}
if(max>MaxSum)
{
MaxSum=max;
}
}
}
for(i=0;i<x;i++)
{
sum[i]=0;
}
}
cout<<"这个数组的最大子数组的和是:"<<MaxSum<<endl;
system("pause");
}
运行结果:
总结:本次作业我们采用结对开发,二人合作,虽然前期效率可能不如一个人效率高,但是慢慢的就明显的感觉到效率的提高,而且在更多代码更复杂的工作的时候,结对开发更是十分的方便,效率。我也返回二维整数数组中最大子数组的和有了一定的了解,深刻了我对上节课的单元测试的认识。
组队照片: