求一個二維陣列所有子陣列和的最大值(郭少周,陳澤)
阿新 • • 發佈:2018-11-07
小組成員:陳澤 郭少周
設計流程:
設計要求.:1. 輸入一個二維整形陣列,數組裡有正數也有負數。
2.二維陣列中連續的一個子矩陣組成一個子陣列,每個子陣列都有一個和。
3.求所有子陣列的和的最大值。要求時間複雜度為O(n)。
程式設計:定義兩個陣列w和z,先通過w陣列算出最大數,再通過z陣列算出最大子陣列和。
遇到問題:1.不明確二維陣列如何定義。
2.不清楚二維陣列最大子陣列如何計算。
3.z陣列的列數設計上出現問題。
解決方案:1.查詢網路資料學習二維陣列c語言定義及其相關知識。
2.通過大神指點z陣列列數應比w陣列列數多一。
3.組員之間能冷靜處理相關問題,互相提出建議彌補對方不足點。
編碼:
#include <iostream.h>
int main()
{
int w[4][5];//定義出4*5的二維陣列
int max;
int s;
int count;
int z[4][6];
cout<<"請寫出你的二維陣列(4*5)中的元素:"<<endl;
for(int i=0;i<4;i++)
{
for(int j=0;j<5;j++)
{
cin>>w[i][j];
}
}
for(i=0;i<4;i++)
{
count=0;
for(int j=0;j<5;j++)
{
s=0;
for(int l=0;l<5-j;l++)
{
s=s+w[i][j+l];
z[i][count+l]=s;
}
count=count+5-j;
}
}
//求出最大數
max=z[0][0];
for(int j=0;j<6;j++)
{
for(i=0;i<4;i++)
{
s=0;
for(int r=0;r<4-i;r++)
{
s=s+z[r+i][j];
if(max<s)
{
max=s;
}
}
}
}
cout<<"該二維陣列的最大子陣列和為:"<<max<<endl;
cout<<endl;
return 0;
} 執行結果: 1.
心得:團結就是力量,仔細斟酌王老師ppt中人與人溝通的方法,提建議的方法,對自己幫助很大,使得組員之間工作事半功倍,矛盾輕鬆化解。另外程式設計方面還是一如既往地渣,有很大的不足還需努力。