一、题目
随机产生二维数组并求最大子数组的和
二、设计思想
先纵向遍历该二维数组,将该二维数组变成一个个的一维数组,在调用上次的程序函数,得出每一个和都存入另一个数组中,最后调用比较函数,找到最大子数组的和。
三、源代码
#includeint Largest(int list[],int length){ int i,max=list[0]; for(i=0;i<(length);i++) { if(list[i]>max) { max=list[i]; } } return max;}int paixv(int list[]){ int sum=0; int max=list[0]; for(int i=0;i<3;i++) { if(sum<=0) { sum=list[i]; } else { sum=sum+list[i]; } if(sum>max) { max=sum; } } return max;}int main(){ int h=0; int a[3][3]; int b[100]; int c[100]; int d[100]; int e[100]; cout<<"please input 9 numbers:"; do { for(int l=0;l<3;l++) { cin>>a[h][l]; } h++; } while(h<3); b[0]=a[0][0]+a[1][0]; c[0]=a[0][0]+a[1][0]+a[2][0]; d[0]=a[1][0]+a[2][0]; b[1]=a[0][1]+a[1][1]; c[1]=a[0][1]+a[1][1]+a[2][1]; d[1]=a[1][1]+a[2][1]; b[2]=a[0][2]+a[1][2]; c[2]=a[0][2]+a[1][2]+a[2][2]; d[2]=a[1][2]+a[2][2]; e[0]=paixv(b); e[1]=paixv(c); e[2]=paixv(d); int sum=0; int max=a[0][0]; for(int i=0;i<3;i++) { if(sum<=0) { sum=a[0][i]; } else { sum=sum+a[0][i]; } if(sum>max) { max=sum; } } e[3]=max; int sum1=0; int max1=a[1][0]; for(int i=0;i<3;i++) { if(sum1<=0) { sum1=a[1][i]; } else { sum1=sum1+a[1][i]; } if(sum1>max1) { max1=sum1; } } e[4]=max1; int sum2=0; int max2=a[2][0]; for(int i=0;i<3;i++) { if(sum2<=0) { sum2=a[2][i]; } else { sum2=sum2+a[2][i]; } if(sum2>max2) { max2=sum2; } } e[5]=max2; int max3=Largest(e,6); cout<<"最大矩阵的和为:"<