一、题目要求
题目:返回一个二维整数数组中最大子数组的和。
要求: 输入一个二维整形数组,数组里有正数也有负数。
二维数组首尾相接,象个一条首尾相接带子一样。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大
两人结对完成编程任务。一人主要负责程序分析,代码编程。 一人负责代码复审和代码测试计划。
发表一篇博客文章讲述两人合作中的过程、体会以及如何解决冲突(附结对开发的工作照)。(截止到周四4月21日24:00)
二、设计思路
本次实验设计思路非常简单,就是融合了之前两次实验的思路,还是用之前二维数组的计算方法,比如一个三行三列的矩阵,让每一列都做一次第一列,然后按照每一次换完之后的矩阵计算它的子矩阵。
三、代码
//康娜,2015年4月17日
#include<iostream>
#include<time.h>
using namespace std;
#define N 3
void main()
{
srand((int)time(0));
int i,j,a[N][N];
for(i=0;i<N;i++)
for(j=0;j<N;j++)
{
a[i][j]=-rand()%36+25;
}
cout<<"所得随机矩阵如下:"<<endl;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
cout<<a[i][j]<<'\t';
}
cout<<endl;
}
int c=0,b[100],m,sum,sum1;
for(i=0;i<100;i++)
b[i]=0;
for(i=0;i<N;i++)
{
for(int f=0;f<N;f++)
{
m=f;
sum=0;
sum1=0;
for(j=m;j<N;j++)
{
sum+=a[i][j];
b[c]=sum;
c++;
sum1=sum;
for(int d=i+1;d<N;d++)
{
for(int e=f;e<=j;e++)
{
sum1+=a[d][e];
}
b[c]=sum1;
c++;
}
}
if(m>N-1)
{
m=0;
}
}
}
for(i=0;i<c;i++)
cout<<b[i]<<" ";
cout<<endl;
int max;
max=b[0];
for(i=0;i<c;i++)
{
if(b[i]>max)
{
max=b[i];
}
}
cout<<max;
}
四、运行效果截图
五、总结
这次编程的思路和上次一维环形数组是一样的,只不过相当于一维数组的一个扩充。编程的思路很重要,虽然是不同的程序,但是很多思路都是相通的,方法也是类似的。以后在编程过程中,会注重归纳和总结。