返回最大数组练习

总结
本次的课堂作业是返回一个二维整数数组中最大子数组的和,从题目上讲和上一次的课堂作业大同小异,基本上是相同的,也是求取所有子数组的和之后进行比较求出最大值,即为最终的返回值。由于这一次的程序和上一次的程序大同小异,因此按照上一个程序的思路结合这一次程序中所出现的新问题新困难,通过讨论与上网搜寻资料的方式进行了编程。这次的编写程序的重点步骤为以下三处:

1)输入一个二维整形数组,要求数组里有正数也有负数。即要求程序中既能处理正数也能处理负数。

2)二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和。意思即为在所想要运行的二维数组中每一个连续的子矩阵组为一个子数组,并且计算得出每一个子数组的和,这一步骤应该是整个程序的核心了,任务也是比较重的,最后通过交流以及搜寻资料解决了这一困难。

3)求所有子数组的和的最大值。将上一步骤中所求出的所有子数组的和比较得出所有子数组的最大值即为程序的最终返回值。完成这一步骤的程序以后整个程序即为完成了,之后进行运行调试成功。

 #include<iostream>
using namespace std;
void main ()
{
    int a,b,c,d,e=0,A[100][100];
 
    cout<<"输入矩阵的行()和列";
    cin>>a>>b;
    if(a>100||b>100)
    {
        cout<<"请重新输入:";
        cin>>a>>b;
    }
    for(c=0;c<a;c++)
    {
        for(d=0;d<b;d++)
        {
            cin>>A[c][d];
        }
 
    }
    int sum[100]={0},max=0,result=A[0][0];
 
    for(c=0;c<a;c++)
    {
        while(e+c<a)
        {
            for(d=0;d<b;d++)
            {
                sum[d]=sum[d]+A[e+c][d];
 
            }
            max=0;
            for(d=0;d<b;d++)
            {
                if(max+sum[d]>sum[d])
                {
                    max=max+sum[d];
                }
                else
                {
                    max=sum[d];
                }
                if(max>result)
                {
                    result=max;
                }
            }
            e++;
        }
        e=0;
        for(d=0;d<b;d++)
        {
            sum[d]=0;
        }
 
    }
 
    cout<<result;

 

猜你喜欢

转载自www.cnblogs.com/lbq-0412/p/10248419.html