課堂練習3 返回一個二維整數陣列中最大子陣列和
小組成員:陳澤 郭少周
設計流程:
設計要求.: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.輸入的陣列為:(4*5)
5 7 -4 3 6
2 -5 -6 9 1
3 7 5 4 -7
1 3 5 -5 6
2.計算結果:該二維陣列的最大子陣列為40
3.計算結果截圖:
心得:仔細學習王老師ppt中人與人溝通的方法,提建議的方法,對自己幫助很大,組員之間相互合作工作事半功倍,矛盾輕鬆化解。另外程式設計方面還有很大的不足,還需努力。