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

返回二維整陣列中最大子陣列的和程式設計

作業要求:

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

2、二維陣列中連續的一個子矩陣組成一個子陣列。

3、求所有子陣列的和的最大值。

設計思想:

1、將二維陣列分解成一維陣列,使用一位陣列求最大子陣列之和的方法。

2、列舉出每一個子陣列值的大小,然後進行比較。

3、最終求得二維陣列最大子陣列之和。

出現的問題

1、在開始的時候因為沒有理清一維陣列和二維陣列的關係導致長時間沒有找到合適的解決方法。

2、在列舉的子陣列的時候以為分組方法選的不對導致子陣列列舉不完全,以致結果出錯。

3、程式語言的儲備較少以至於有些功能不知道如何用語言實現。

int main()  

{  

 int row, col, i, j;  

 cout<<"please input the row and col of the array:"<<endl;

 cin >> row >> col;  

 cout<<"please input the data of the array:"<<endl;

 for (i=1; i<=row; i++)  

  for (j=1; j<=col; j++)  

   cin >> arr[i][j];  

 for (i=0; i<=row; i++)  

  Sum[i][0] = 0;  

 for (j=0; j<=col; j++)  

  Sum[0][j] = 0;  

 for (i=1; i<=row; i++)  

  for (j=1; j<=col; j++)  

   Sum[i][j] = arr[i][j]+Sum[i-1][j]+Sum[i][j-1]-Sum[i-1][j-1];  

  int a, c;  

 long long MaxSum = arr[1][1];  

 for (a=1; a<=row; a++)  

  for (c=a; c<=col; c++) 

  {  

   long long Tail = MatrixSum(a, 1, c, 1);  

   for (j=2; j<=col; j++)  

   {  

    Tail = max( MatrixSum(a, j, c, j), MatrixSum(a, j, c, j)+Tail);   

    MaxSum =max(Tail, MaxSum);  

   }  

  }  

  cout <<"最大的子矩陣和為:"<< MaxSum<<endl;  

  system("pause");

  return 0;

總結:這是第一次結對程式設計,對兩個人的配合默契程度有一定的要求,兩個人要充分運用自己的長處再能使兩人同時度過難關。