返回一個二維整形陣列的子陣列的最大和
阿新 • • 發佈:2018-11-07
實驗要求:1輸入一個二維整形陣列,陣列中有正數也有負數。2二維陣列中連續的一個子矩陣組成一個子陣列,每個 子陣列都有一個和。求所有子陣列的和的最大值。實驗思路: 1.首先確定子陣列的最大上界,從第一行依次向下,規定最大子陣列的範圍。 2.確定子陣列的行列型別。 3.用一維子陣列的方法求出子陣列的最大和,求出最大值。 4.最後將子陣列的最大上界下降1,再迴圈。實驗程式碼
#include<iostream>
using namespace std;
void main ()
{
int i,j,m,n,l=0,A[100][100];
cout<<"輸入矩陣行列數";
cin>>m>>n;
if(m>100||n>100)
{
cout<<"請重新輸入:";
cin>>m>>n;
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
cin>>A[i][j];
}
}
int sum[100]={0},max=0,result=A[0][0];
for(i=0;i<m;i++)
{
while(l+i<m)
{
for(j=0;j<n;j++)
{
sum[j]=sum[j]+A[l+i][j];
}
max=0;
for(j=0;j<n;j++)
{
if(max+sum[j]>sum[j])
{
max=max+sum[j];
}
else
{
max=sum[j];
}
if(max>result)
{
result=max;
}
}
l++;
}
l=0;
for(j=0;j<n;j++)
{
sum[j]=0;
}
}
cout<<result;
}
執行截圖
實驗總結 本次試驗是上次求一維整數最大子陣列的和的昇華,將整數改成二維陣列,基本思路與一維陣列相似,加入迴圈將最大子陣列上界下降迴圈求出。實驗夥伴 (李鵬,谷豪磊)
#include<iostream>
using namespace std;
void main ()
{
int i,j,m,n,l=0,A[100][100];
cout<<"輸入矩陣行列數";
cin>>m>>n;
if(m>100||n>100)
{
cout<<"請重新輸入:";
cin>>m>>n;
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
cin>>A[i][j];
}
}
int sum[100]={0},max=0,result=A[0][0];
for(i=0;i<m;i++)
{
while(l+i<m)
{
for(j=0;j<n;j++)
{
sum[j]=sum[j]+A[l+i][j];
}
max=0;
for(j=0;j<n;j++)
{
if(max+sum[j]>sum[j])
{
max=max+sum[j];
}
else
{
max=sum[j];
}
if(max>result)
{
result=max;
}
}
l++;
}
l=0;
for(j=0;j<n;j++)
{
sum[j]=0;
}
}
cout<<result;
}
執行截圖
實驗總結 本次試驗是上次求一維整數最大子陣列的和的昇華,將整數改成二維陣列,基本思路與一維陣列相似,加入迴圈將最大子陣列上界下降迴圈求出。實驗夥伴 (李鵬,谷豪磊)