• 返回一个二维整数数组中最大子数组的和。


    要求:

    输入一个二维整形数组,数组里有正数也有负数。

    二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和。

    求所有子数组的和的最大值。要求时间复杂度为O(n)。 

    结对编程要求:

    两人结对完成编程任务。

    一人主要负责程序分析,代码编程。

    一人负责代码复审和代码测试计划。

    发表一篇博客文章讲述两人合作中的过程、体会以及如何解决冲突(附结对开发的工作照)。

    程序:

    import java.util.Random;

    import java.util.Scanner;

    public class zuidashuzu3 {

    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;

    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<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<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]+"*");

    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);

    }

    }   

    }

    }

    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+1>2的效果,从我个人角度来讲,对这次编程多的是被动接受。

    该反思了,,,,

    合作照片:就像照片里面的一样,我只是一个红色的边框

  • 相关阅读:
    利用模板实现c++智能指针
    movit 相关函数(二)
    moveit相关函数解释
    ros常用函数(1)
    Qtcreator中cin函数无法在application output中进行输入的问题的解决
    c++速成,适合有c基础的朋友(3)
    【重要通知】本博客不再更新,更多教程请访问 makermaker.cc
    BBC micro:bit 学习资源汇总(最近更新2019年1月6日....)
    [20个项目学会BBC micro:bit编程] 20-无线通信
    [20个项目学会BBC micro:bit编程] 19-直流电机控制
  • 原文地址:https://www.cnblogs.com/revenge/p/4413489.html
Copyright © 2020-2023  润新知