结对开发 随机产生二维数组并求最大子数组的和

一、题目

 随机产生二维数组并求最大子数组的和 

二、设计思想

先纵向遍历该二维数组,将该二维数组变成一个个的一维数组,在调用上次的程序函数,得出每一个和都存入另一个数组中,最后调用比较函数,找到最大子数组的和。

三、源代码

#include<iostream.h>
int Largest(int list[],int length)
{
    int i,max=list[0];
    for(i=0;i<(length);i++)
    {
        if(list[i]>max)
        {
            max=list[i];
        }
    }
    return max;
}
int paixv(int list[])
{

    int sum=0;
    int max=list[0];

    for(int i=0;i<3;i++)
        {
             if(sum<=0)
             {
                 sum=list[i];

             }
             else
             {
                 sum=sum+list[i];

             }
             if(sum>max)
             {
                 max=sum;
             }
        }
        return max;
}
int main()
{
    int h=0;
    int a[3][3];
    int b[100];
    int c[100];
    int d[100];
    int e[100];
    cout<<"please input 9 numbers:";
    do
    {
        for(int l=0;l<3;l++)
        {
            cin>>a[h][l];
        }
        h++;
    }
    while(h<3);
    b[0]=a[0][0]+a[1][0];
    c[0]=a[0][0]+a[1][0]+a[2][0];
    d[0]=a[1][0]+a[2][0];
    b[1]=a[0][1]+a[1][1];
    c[1]=a[0][1]+a[1][1]+a[2][1];
    d[1]=a[1][1]+a[2][1];
    b[2]=a[0][2]+a[1][2];
    c[2]=a[0][2]+a[1][2]+a[2][2];
    d[2]=a[1][2]+a[2][2];
    e[0]=paixv(b);
    e[1]=paixv(c);
    e[2]=paixv(d);
    int sum=0;
    int max=a[0][0];
    for(int i=0;i<3;i++)
        {
             if(sum<=0)
             {
                 sum=a[0][i];

             }
             else
             {
                 sum=sum+a[0][i];

             }
             if(sum>max)
             {
                 max=sum;
             }
        }
        e[3]=max;
        int sum1=0;
        int max1=a[1][0];
        for(int i=0;i<3;i++)
        {
             if(sum1<=0)
             {
                 sum1=a[1][i];

             }
             else
             {
                 sum1=sum1+a[1][i];

             }
             if(sum1>max1)
             {
                 max1=sum1;
             }
        }
        e[4]=max1;
        int sum2=0;
        int max2=a[2][0];
        for(int i=0;i<3;i++)
        {
             if(sum2<=0)
             {
                 sum2=a[2][i];

             }
             else
             {
                 sum2=sum2+a[2][i];

             }
             if(sum2>max2)
             {
                 max2=sum2;
             }
        }
        e[5]=max2;
        int max3=Largest(e,6);
        cout<<"最大矩阵的和为:"<<max3;


}
四、结果截图

五、实验总结
上课老师和同学提供了一个很好的设计思想,所以这次编程相对简单。
我俩利用上次横向遍历数组的经验先纵向遍历数组,在调用上次的函数即完成了要求。
但矩阵较小,以后一定改正。
我的队友石鹤想出了这个题目的设计思想,我编写了程序,我们俩一起进行了测试,希望我俩以后继续进步。
六、相片


 

posted @ 2015-03-22 13:09  weaponX  阅读(154)  评论(1编辑  收藏  举报