• 二维数组和最大字数组求取 2


    题目:

    返回一个二维数组的和最大字数组的和

     

    要求:

    随机生成二维数组,要求数组元素有正有负

    二维数组首尾相连

    数组中连续的n(n>=1)元素组成数组的字数组

     

    源代码:

    import java.util.Random;

    import java.util.Scanner;

     

    public class erweixunhuanzishuzu {

    public static void main(String[] args) {

    //产生随机数组

    int array[][] = new int[1000][1000];

    int arraytemp[] = new int [1000];

    int row,col,sum,sumTemp;

    int t,m;

    int qx=0,qy=0;

    int zx=0,zy=0;//分别记录子数列的起始和结束位置

    for(int i=0;i<1000;i++)

    arraytemp[i]=0;

    System.out.print("请分别输入数组的行数和列数:");

    Scanner sc=new Scanner(System.in);

    row = sc.nextInt();

    col = sc.nextInt();

    Random r = new Random();

    System.out.println("产生的随机数序列为:     ");

    for(int i=0;i<row;i++){

    for(int j=0;j<col;j++){

    array[i][j]=r.nextInt()%10;

    array[i][j+col]=array[i][j];

    }

    }

    for(int i=0;i<row;i++){

    for(int j=0;j<col;j++){

    System.out.print(array[i][j]+"   ");

    if(j == col-1)

    System.out.println("");

    }

    }

     

    //求最大子数组

    sum=array[0][0];

    sumTemp=sum;

    for(int i=0;i<row;i++){

    for(int x=0;x<1000;x++)

    arraytemp[x]=0;

    for(t=i;t>=0;t--){

        for(int s=0;s<2*col;s++){

        if(t>=0){

        arraytemp[s]+=array[t][s];

        //qx=t;

        //qy=s;

        //System.out.println("&"+qx+" "+qy);

        //System.out.println("%"+arraytemp[s]+"%");

        }

        }

        sumTemp=arraytemp[0];

        m=0;

    for(int j=0;j<2*col;j++){//按列消元

    if(sumTemp<=0){

    sumTemp=0;

    m=j+1;

    //qx=t;

    //qy=j;

    //System.out.println("&1 "+qx+" "+qy);

    }

    //System.out.println("#"+sumTemp+"#");

    //System.out.println("*"+arraytemp[j+1]+"*");

    if(j+1<qy+col){

    sumTemp+=arraytemp[j+1];

    if(sumTemp>sum){

    sum=sumTemp;

    qx=t;

    qy=m;

    zx=i;

    zy=j+1;

        //System.out.println("@"+qx+" "+qy);

        //System.out.println("%"+zx+" "+zy);

    }

    }

    /*else

    break;*/

    }   

    }

    }

    System.out.println("最大子数组的和为:"+sum);

    System.out.println("子数组为:");

    for(int i=qx;i<=zx;i++)

    for(int j=qy;j<=zy;j++){

    System.out.print(array[i][j]+" ");

    if(j==zy)

    System.out.println("");

    }

    }

    }

     

    结果截图:

     

     

     

     

    编程总结:

    现在对于模块化编程逐渐有了自己的理解了,从一开始听说这个概念,只知其然,不知其所以然,经过这几次有关于数组代码的编写,“所以然”逐渐的浮现出来了。

    一个新的问题的出现,总能够根据其特点,依据不同的着重点,将一个问题细化成许多“小组件”,解决这些小组件要比直接解决大问题本身要容易的多。

    对于此次编程的收获:

    看到本次的编程要求,感觉上应该分为两个方面的问题:

    1、 实现二维数组的自身“环化”

    2、 和最大字数组的求取问题

    因为处于对自己水平的了解,我现在需要做的是多吸收别人编程的算法,思想,当然,这只是用来提高自己编程水平的一个阶段,随着这种练习的增加,我相信会有更多的收获和理解的,只要我肯去做,而不是想象着我要去做。

    现在有一个初步的体会,许多算法是可以组合起来的,一些以前自己实现过的算法经过合理的安排,就能够解决一个新产生的问题,这是一种源于日积月累解决问题的方法,需要自己长时间的坚持和努力。

    我在路上~

  • 相关阅读:
    几个常用myeclipse快捷键
    5G layer
    customize the entry point of pod runtime
    关于JS Pormise的认识
    修改 /etc/pam.d/login, linux 本地账号密码无法登陆,一直返回 登陆的login界面
    Java支付宝PC网站支付功能开发(详细教程)
    支付宝PC支付功能异步通知签名验证失败解决方案
    提交代码出现 Push to origin/master was rejected 错误解决方法
    易语言连接RCON详细教程实例(演示连接Unturned服务器RCON)
    易语言调用外部DLL详细实例教程
  • 原文地址:https://www.cnblogs.com/revenge/p/4459779.html
Copyright © 2020-2023  润新知