1. 程式人生 > >個人專案3

個人專案3

題目:返回一個二維整數陣列中最大子陣列的和。

要求:

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

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

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

結對程式設計要求:

        兩人結對完成程式設計任務。 一人主要負責程式分析,程式碼程式設計。

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

        講述兩人合作中的過程、體會以及如何解決衝突。

編寫思路:

        題目的重點在於如何去求子陣列和的最大值,通過網上查詢資料,得到方法:將二維整型陣列求最大子陣列之和化為求一位最大子陣列之和,將二維整型陣列求最大子陣列之和化為求一位最大子陣列之和。

主要程式碼:

        #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++)//確定子陣列的最大上界(為第i行)
  {
    while(m+i<x)//確定子陣列有m+i行
    {
      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;
}

執行截圖:

  

 

  

      

總結,真相照片:

  仔細學習了陣列相關知識,思考如何進行最大子陣列的判斷,參考園友的處理方式與隊友理解最後有了這個方法。通過這次練習,發現自己程式設計能力仍然很欠缺,缺少程式設計實踐只能通過去查閱資料來獲得思路,這次練習自己的完成度也不是很高,有待加強。發生衝突時,先通過互相交流意見爭取達成統一意見,再從網上查資料程式設計實踐,選擇對的的方法.