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

  • 相关阅读:
    Window 窗口类
    使用 Bolt 实现 GridView 表格控件
    lua的table库
    Windows编程总结之 DLL
    lua 打印 table 拷贝table
    使用 xlue 实现简单 listbox 控件
    使用 xlue 实现 tips
    extern “C”
    COleVariant如何转换为int double string cstring
    原来WIN32 API也有GetOpenFileName函数
  • 原文地址:https://www.cnblogs.com/zchenjian/p/4433887.html
Copyright © 2011-2022 走看看