组员:李金吉、赵天
思想:二位子数组的思想基本上与一维数组求和相同,采用穷举法,只不过是增加了纵向的遍历。
代码如下:
#include "stdafx.h" #include<iostream> #define null -858993460 using namespace std; void main() { /*int arr[]={8,9,10,-1,20,-30,4}; int arr2[]={-9,-1,-4,-123}; int arr3[]={0}; int arr4[]={7,9,8}; int arr5[3];*/ int a[][100]={{5,6,-3,8,-9,2},{1,-12,20,0,-3,-5},{-9,-7,-3,6,7,-1}}; // int yiwei_maxsub_list(int list[],int length); int erwei_maxsub_list(int list[][100],int x,int y); /*cout<<"一维数组:"<<endl; cout<<yiwei_maxsub_list(arr,7)<<endl; cout<<yiwei_maxsub_list(arr2,4)<<endl; cout<<yiwei_maxsub_list(arr3,1)<<endl; cout<<yiwei_maxsub_list(arr4,3)<<endl; cout<<yiwei_maxsub_list(arr5,0)<<endl;*/ cout<<erwei_maxsub_list(a,3,6)<<endl; } /* int yiwei_maxsub_list(int list[],int length) { int a[100]={0}; int max; int i,j; int k=0; if(list==NULL||length==0) { cout<<"error!inter is null!"; return 0; } for(i=0;i<length;i++) { a[k]=list[i]; for(j=i;j<length;j++) { a[k+1]=a[k]+list[j+1]; k++; } } max=a[0]; for(i=0;i<k;i++) { if(max<a[i]) { max=a[i]; } } return max; }*/ int erwei_maxsub_list(int list[][100],int l,int w) { int m[100][100]={0}, n[100][100]={0}, max,i,j,s,t,k; for(t=0;t<l;t++) { k=0; for(i=0;i<w;i++) { m[t][k]=list[t][i]; for(j=i;j<w;j++) { m[t][k+1]=m[t][k]+list[t][j+1]; k++; } } }s=k; for(int d=0;d<s;d++) { k=0; for(i=0;i<l;i++) { n[k][d]=m[i][d]; for(j=i;j<l;j++) { n[k+1][d]=n[k][d]+m[j+1][d]; k++; } } } max=n[0][0]; for(i=0;i<k;i++) { for(j=0;j<s;j++) if(max<n[i][j]) { max=n[i][j]; } } return max; }
截图: