1. 程式人生 > >返回一個二維整陣列中最大子陣列的和

返回一個二維整陣列中最大子陣列的和

要求:

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

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

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

結對程式設計要求:

1.兩人結對程式設計任務。

2.一人主要負責程式分析,程式碼程式設計。

3.一人負責程式碼複審和程式碼測試計劃。

4.發表一篇部落格文章講述兩人合作中的過程,體會以及如何解決衝突(附結對開發的工作照)。

程式設計程式碼:

  

#include<iostream>
using namespace std;
void main ()
{
    int x,y,i,j,m=0,A[100][100];
 
    cout<<"輸入矩陣的行()與列()";
    cin>>x>>y;
    if(x>100||y>100)
    {
        cout<<"請重新輸入:";
        cin>>x>>y;
    }
    for(i=0;i<x;i++)
    {
        for(j=0;j<y;j++)
        {
            cin>>A[i][j];
        }
 
    }
    int sum[100]={0},max=0,result=A[0][0];
 
    for(i=0;i<=x;i++)
    {
        while(m+i<x)
        {
            
            for(j=0;j<=y;j++)
            {
                sum[j]=sum[j]+A[m+i][j];
 
            }
            max=0;
            for(j=0;j<y;j++)
            {
                if(max+sum[j]>sum[j])
                {
                    max=max+sum[j];
                }
                else
                {
                    max=sum[j];
                }
                if(max>result)
                {
                    result=max;
                }
            }
            m++;
        }
        
        m=0;
        for(j=0;j<y;j++)

{ sum[j]=0; } } cout<<result; }

  

 

 

 

 

測試結果:可以正常執行;

                  如果全是0的話,輸出就為0;

                  如果是一個值的話,輸出的則是一個值;

                  如果全是負值的話,則輸出負值中最大的。
二維陣列求最大子陣列是從一維陣列擴充套件而來,一維陣列可用線性解決,對於二位陣列本來的想法是以O(n)的時間複雜度實現可經過自己查閱資料和同學討論還是沒有想出解決方案,最後只能把結果做出為目標制定瞭如上的思路,本次的任務依然是結對開發在這次的的開發過程中我和劉波同學分工明確也漸漸找到了結對開發的一些注意的事項,在工作中也會有不同的的看法比如在討論制定思路方面,我們面對意見不同時我們各自告訴對方自己的看法在分析誰的想法比較好這樣也解決了問題,結對開發中收穫了很多。