软件工程课堂三

求二维数组的矩形数组的最小数组和。

最笨的设计思想:将这个矩形是两个对角顶点组成的。将两个点设为a,b。a表示上面那个顶点,b表示下面那个顶点。将a固定,移动b点直至出二维数组,然后移动a点,再将b点指向a点。这样轮回直到a移出二维数组。

package test3;
public class The_thrid_test {
 public static void main(String[] args) {
  int a[][]= {{-1,2,3,-4},{-1,2,3,-4},{-1,2,3,-4},{-1,2,3,-4}};//表示一个二维数组
  int max = a[0][0];  //初始化最大值
  int sum=0;  //定义每个子二维数组的和
  int as=0,bs=0,n=0,m=0;  //定义让矩形的两个对顶点的角标
  while(n<a.length) {    //如果矩形的第一个顶点出了二维数组时跳出循环
   
   for(int i=n;i<=as;i++) {    //计算以不同数字为矩形第一个顶点的多有子二维数组的和
    for(int j=m;j<=bs;j++) {
     sum+=a[i][j];
    }
   }
   
   //让下面的顶点移动
   bs++;
   if(bs==a[as].length) {
    as++;
    bs=m;
   }
   
   //让上面的顶点移动并将移到外面的顶点指向上面的顶点上。
   if(as==a.length) {
    m++;
    if(m==a[n].length)
    {
     n++;
     m=0;
    }
    as=n;
    bs=m;
   }
   //比较最大值
   if(sum>max)
    max=sum;
   sum=0;
  }
  System.out.println(max);
 }
}
原文地址:https://www.cnblogs.com/goubb/p/10590756.html