1. 程式人生 > >求一個二維陣列所有子陣列和的最大值(郭少周,陳澤)

求一個二維陣列所有子陣列和的最大值(郭少周,陳澤)

小組成員:陳澤 郭少周

設計流程:

 

 

設計要求.1輸入一個二維整形陣列,數組裡有正數也有負數。

                    2.二維陣列中連續的一個子矩陣組成一個子陣列,每個子陣列都有一個和。

                    3.求所有子陣列的和的最大值。要求時間複雜度為O(n)。

程式設計:定義兩個陣列w和z,先通過w陣列算出最大數,再通過z陣列算出最大子陣列和。

遇到問題:1.不明確二維陣列如何定義。

                    2.不清楚二維陣列最大子陣列如何計算。

                    3.z陣列的列數設計上出現問題。

解決方案:1.查詢網路資料學習二維陣列c語言定義及其相關知識。

                    2.通過大神指點z陣列列數應比w陣列列數多一。

                    3.組員之間能冷靜處理相關問題,互相提出建議彌補對方不足點。

編碼:

 

 #include <iostream.h>
int main()
{
    int w[4][5];//定義出4*5的二維陣列
    int max;
    int s;
    int count;
    int z[4][6];
    cout<<"請寫出你的二維陣列(4*5)中的元素:"<<endl;
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<5;j++)
        {
            cin>>w[i][j];
        }
    }
    for(i=0;i<4;i++)
    {
        count=0;
        for(int j=0;j<5;j++)
        {
            s=0;
            for(int l=0;l<5-j;l++)
            {
                s=s+w[i][j+l];
                z[i][count+l]=s;
            }
            count=count+5-j;
        }
    }
    //求出最大數
    max=z[0][0];
    for(int j=0;j<6;j++)
    {
        for(i=0;i<4;i++)
        {
            s=0;
            for(int r=0;r<4-i;r++)
            {
                s=s+z[r+i][j];
                if(max<s)
                {
                    max=s;
                }
            }
        }
    }
    cout<<"該二維陣列的最大子陣列和為:"<<max<<endl;
    cout<<endl;
    return 0;
執行結果:  1.
輸入的陣列為:(4*5)
                                                  5 7 -4 3 6                                                   2 -5 -6 9 1                                                   3 7 5 4 -7                                                   1 3 5 -5 6                       2.計算結果:該二維陣列的最大子陣列為40                        3.計算結果截圖:  

心得:團結就是力量,仔細斟酌王老師ppt中人與人溝通的方法,提建議的方法,對自己幫助很大,使得組員之間工作事半功倍,矛盾輕鬆化解。另外程式設計方面還是一如既往地渣,有很大的不足還需努力。