题目:返回一个 二维整数 数组中最大子数组的和
要求: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");
}
结果截图:
总结 :经过本次实验,我发现二人结组完成编程效率十分的高,我们一个人负责程序分析代码编程,另一个人负责复审和代码测试,让我们明白团队合作的重要性,为我们以后的学习工作奠定了良好的基础,让我们认识到了团队合作的重要性,通过这次实验我收获的很多。
组队照片: