返回一個 二維整數 陣列中最大子陣列的和
題目:返回一個 二維整數 陣列中最大子陣列的和
要求:1.輸入一個二維整型陣列,數組裡有正數也有負數。
2.二維陣列中連續的一個子矩陣組成一個子陣列,每個子陣列都有一個和。
3.求所有子陣列的和的最大值。
設計思想: 上一節課學習了一個一維陣列的求最大子陣列的和,所以這次二維陣列求最大子陣列的和,我認為可以演變成一維陣列求最大子陣列的和。
//1.首先確定最大子陣列範圍。
//2.把二維陣列分成幾組有不同的列的陣列,演變成一維陣列求和的方法。
//3.把分割的幾個陣列,用上節課一維陣列求子陣列之和最大值的方法求出子陣列的最大值。
//4.利用for迴圈完成計算。
程式程式碼:
#include<iostream>
#include<stdlib.h>
using namespace std;
void main ()
{
int x,y,i,j,m=0;
cout<<"請輸入陣列的行:";
cin>>x;
cout<<"請輸入陣列的列:";
cin>>y;
int *A = new int[x*y];
cout<<"請按照行和列的格式輸入一個數組:"<<endl;
for(i=0;i<x;i++)
{
for(j=0;j<y;j++)
{
cin>>A[i*y+j];
}
}
int sum[100]={0},MaxSum=A[0];
for(j=0;j<y;j++)
{
for(m=0;m<y;m++)
{ for(i=0;i<x;i++)
{
sum[i]=sum[i]+A[i*y+(m+j)];
}
int max=0;
for(i=0;i<x;i++)
{
if(max+sum[i]>sum[i])
{
max=max+sum[i];
}
else
{
max=sum[i];
}
if(max>MaxSum)
{
MaxSum=max;
}
}
}
for(i=0;i<x;i++)
{
sum[i]=0;
}
}
cout<<"這個陣列的最大子陣列的和是:"<<MaxSum<<endl;
system("pause");
}
結果截圖:
總結 :經過本次實驗,我發現二人結組完成程式設計效率十分的高,我們一個人負責程式分析程式碼程式設計,另一個人負責複審和程式碼測試,讓我們明白團隊合作的重要性,為我們以後的學習工作奠定了良好的基礎,讓我們認識到了團隊合作的重要性,通過這次實驗我收穫的很多。
組隊照片: