一、题目
随机产生二维数组并求最大子数组的和
二、设计思想
先纵向遍历该二维数组,将该二维数组变成一个个的一维数组,在调用上次的程序函数,得出每一个和都存入另一个数组中,最后调用比较函数,找到最大子数组的和。
三、源代码
#include<iostream.h> int 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<<"最大矩阵的和为:"<<max3; }
四、结果截图
五、实验总结
上课老师和同学提供了一个很好的设计思想,所以这次编程相对简单。
我俩利用上次横向遍历数组的经验先纵向遍历数组,在调用上次的函数即完成了要求。
但矩阵较小,以后一定改正。
我的队友石鹤想出了这个题目的设计思想,我编写了程序,我们俩一起进行了测试,希望我俩以后继续进步。
六、相片