返回一個二維整形陣列中的最大子陣列的和(隨機二維整形陣列)
阿新 • • 發佈:2018-10-31
一、題目:返回一個二維整數陣列中的最大子陣列的和(隨機二維整形陣列)
二、課題要求:
輸入一個二維整形陣列,數組裡有正數也有負數;
二維陣列中連續的一個子矩陣組成一個子陣列,沒個子陣列都有一個和;
求所有子陣列的和的最大值,要求時間複雜度為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/