zoukankan      html  css  js  c++  java
  • 二维数组求最大子数组的和

    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++)
                {
                    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嵌套也是小菜一碟。

  • 相关阅读:
    fastadmin表单弹窗按钮显示为数据库数据
    fastadmin根据栏目获取全部文章
    关于Ubuntu系统的音频录制和播放以及bug解决
    GCC、G++升级
    Install protoc3(Protobuf)
    java学习day12--类与类之间的关系
    java学习day11--接口
    java学习day11--抽象类
    java面试基础题2
    java学习day10--final关键字
  • 原文地址:https://www.cnblogs.com/zchenjian/p/4433887.html
Copyright © 2011-2022 走看看