二维数组子数组最大和
1.结组成员
周盼超、张晨建
2.实现功能
随机产生一个二维整形数组,数组里有正数也有负数。
二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。
3.设计思路
我感觉,这应该是最笨的方法了吧,我们用了用了四个for嵌套。思路很简单:每一行每一行的求最大子数组和即看成n个一维子数组求最大子数组和,记录结果,然后把两行看做一行上下两个数相加,每两行两行求最大子数组和,然后三行,四行,n行。
4.完整代码
package 二维数组; import java.util.Random; import java.util.Scanner; public class b { public static void main(String[] args) { // TODO Auto-generated method stub int a[][]; int i,j,l,h,n,k,sum,max; ///随机产生一个数组 Scanner scanner = new Scanner(System.in); System.out.print("输出随机产生的数组的长度:"); h=scanner.nextInt(); System.out.print("输出随机产生的数组的高度:"); l=scanner.nextInt(); scanner.close(); a=new int[l][h]; for(i=0;i<l;i++) { for(j=0;j<h;j++) { Random random = new Random(); a[i][j]=random.nextInt(19); a[i][j]=a[i][j]-9; System.out.print(a[i][j]); System.out.print(" "); } System.out.println(""); } max=0; for(n=0;n<l;n++) { sum=0; for(i=0;i<l-n;i++) {
sum=0; for(j=0;j<h;j++) { for(k=i;k<=i+n;k++) { sum=sum+a[k][j]; } //System.out.print(sum); //System.out.print(" "); if(sum<0) { sum=0; } if(max<sum) { max=sum; } } } } System.out.print(max); System.out.println(""); } }
5.运行结果截图
6.我的收获
此次实验,我们经过了思考、讨论、编程、测试。现在感觉思考阶段是最为要紧的,我们没有想出什么更好的办法,就用四个for这种笨法简单的实现了。但这次实验也有不小的收获,就是对for的使用更加熟悉了,四个for嵌套也是小菜一碟。