《返回一个二维整数数组中最大子数组的和》

一、题目要求

题目:返回一个二维整数数组中最大子数组的和。

要求: 输入一个二维整形数组,数组里有正数也有负数。

         二维数组首尾相接,象个一条首尾相接带子一样。

         数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大

         两人结对完成编程任务。一人主要负责程序分析,代码编程。 一人负责代码复审和代码测试计划。

         发表一篇博客文章讲述两人合作中的过程、体会以及如何解决冲突(附结对开发的工作照)。(截止到周四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]<<'	';
        }
        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;


}

四、运行效果截图

五、总结

两个程序的结合就可以创造出一个新的程序,以后在其他的编程实验中可以这样运用自己以前写过的程序并加以改进。这种方法快速又便捷。

原文地址:https://www.cnblogs.com/lottie021/p/4446709.html