二维数组子数组最大和

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

转载于:https://www.cnblogs.com/feifeishi/p/4429077.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值