码迷,mamicode.com
首页 > 编程语言 > 详细

二维数组环求最大子数组

时间:2015-04-24 08:57:41      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

1.实验要求

  随机产生一个二维整形数组,数组里有正数也有负数。

  二维数组首尾相接,象个一条首尾相接带子一样。

  数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 

  求所有子数组的和的最大值。

2.实验思路

  先随机产生一个二维数组;

  二维数组的第一列移动到最后一列,求最大的子数组和;

  二维数组的第一列移动到最后一列,求最大的子数组和;

  二维数组的第一列移动到最后一列,求最大的子数组和;

  ······

  直到循环完毕。

3. 完整代码

import java.util.Random;
import java.util.Scanner;


public class twoarray2 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
         int a[][];
            int i,ii,j,jj,l,h,n,nn,k,kk,sum,max=0;
            ///随机产生一个数组
            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("");
            }
             
            for(nn=0;nn<h;nn++)
            {
                for(ii=0;ii<l;ii++)//l行的第一个数放到最好
                {
                    kk=a[ii][0];
                    for(jj=0;jj<h-1;jj++)//每一行的第一个数放到最好
                    {
                        a[ii][jj]=a[ii][jj+1];
                    }
                    a[ii][jj]=kk;
                }
                System.out.println("将数组的第一列放到最后一列: ");
                for(i=0;i<l;i++)/////////aaa输出动后的数组
                {
                    for(j=0;j<h;j++)
                    {
                        System.out.print(a[i][j]);
                        System.out.print(" ");
                    }
                    System.out.println("");
                }////////////////////////aaa输出动后的数组
                //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("目前求得的最大和的子数组的和为: ");
                System.out.println(max);
            }


    }

}

4. 截图

技术分享

5. 总结

   我们采用了最基本的方法,不过我们运用了多次验证结果的方法,使截图运行更加可靠。

二维数组环求最大子数组

标签:

原文地址:http://www.cnblogs.com/zchenjian/p/4452412.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!