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

返回一個二維整形陣列中的最大子陣列的和(隨機二維整形陣列)

一、題目:返回一個二維整數陣列中的最大子陣列的和(隨機二維整形陣列)

二、課題要求:

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

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

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

三、結對程式設計要求:

兩人結對完成程式設計任務;

一人主要負責程式分析,程式碼程式設計;

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

四、設計思路

  定義一個二維陣列,並對其進行隨機生成,定義為int32型別,用遍歷方法進行計算每個子陣列的和,並對其進行比較,結果輸出最大子陣列的和。

五、程式程式碼

#include <iostream>
#include 
<time.h> 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<<"超過行列數範圍,請重新輸入:"; //保證程式健壯性,超過100行或100列重新輸入 cin>>x>>y; cout<<endl; }
int sum[100]={0},max=0,result=A[0][0]; srand((int)time(0)); //獲得隨機二維整形陣列 cout<<"所得隨機矩陣如下:"<<endl; for(i=0;i<x;i++) { for(j=0;j<y;j++) { A[i][j]=-rand()%36+25; cout<<A[i][j]<<'\t'; } cout
<<endl; } 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; //獲得最大子陣列的和 }

六、執行結果

①行列數在100範圍以內,直接執行

②超過100範圍時重新輸入

六、收穫總結

  經過這次結對練習,對結對練習有了更進一步的認識與熟悉,並對程式進行健壯性保護。

七、時間記錄日誌

時間記錄日誌
日期 開始時間 結束時間 中斷時間 淨時間 活動
10.20 19:00  21:00 40分鐘 80分鐘 梳理程式設計思路,進行三次編寫除錯
10.21 20:00 22:00 20分鐘 100分鐘 編寫程式碼除錯,編寫部落格園

八、組員

  組員部落格:姬浩桐:http://www.cnblogs.com/hyjht/

  組員部落格:祁    軍:http://www.cnblogs.com/qijun1120/