二维数组

拿到这个题,总是想着一部解决问题,结果越想越乱,越想越头疼。

一开始我想的是,将二维数组转化为一维数组,但是逻辑不通,基本就不可能实现,之后也就放弃了。

设计思想:

首先需要确定计算出所有子数组,再求最大子数组;

那么问题就来了:如何确定子数组呢?课上也是受到老师的点播:

确定子数组:只需确定左上角与右下角数据坐标便可;

之后就可以计算在确定区间里数据的和了。

源代码:

import java.util.List;
import java.util.Scanner;
import java.util.*;
import java.util.Scanner;
import java.util.StringTokenizer;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.lang.Math;
import java.io.IOException;
public class ErJie {
    
    public static void main(String[] args)
    {
        //定义
    int[][] str=new int[100][100];//主体
    int[] str1=new int [100];//每一个的串值
    //规定长与宽
    System.out.println("请输入长,宽:");
    int a=0;//总数
    int b=0;
    Scanner scan=new Scanner(System.in);
    a=scan.nextInt();
    b=scan.nextInt();
    //输入值
    System.out.println("请输入值:");
    for(int i=0;i<a;i++) {
        for(int j=0;j<b;j++)
        {int s1;
        s1=scan.nextInt();
        str[i][j]=s1;}
    }int l=0;
    //输出
    for(int i=0;i<a;i++) {
        for(int j=0;j<b;j++)
        System.out.println("("+(i+1)+", "+(j+1)+")是:"+str[i][j]);
    }
    //代码实现
    int Q=0;int M=0;
    for(int i=0;i<a;i++) {//一共一行到a行
        Q=Q+1;//几块进行运算(2 4 。。)
        int O=0;
        for(int n=i;n<a;n++) {//每一行
            O=O+1;//每一行就是对一维的下移
            for(int j=0;j<b;j++) {//每一个
                int P=0;//每一个小组合的第一个
                for(int m=j;m<b;m++) {//从j加到最后
                    int a1=str[i][j];
                    
                    for(int x=i;x<=n;x++) {
                        for(int y=j;y<=m;y++) {
                            a1=str[x][y]+a1;
                        }
                    }
                    str1[M]=a1-str[i][j];
                    M=M+1;
                }
            }
        }
    }
    int x=str1[0];
    for(int i=0;i<M;i++) {
        if(str1[i]>x)x=str1[i];
    }
    
    System.out.println(x);

 摘自https://www.cnblogs.com/smartisn/p/10584400.html

posted @ 2019-03-18 12:46  田智凯  阅读(152)  评论(0编辑  收藏  举报