求数组的相邻子数组的最大值(一维首尾相连,二维数组)

一维数组首尾相连,两个数字可以控制一个子数组。

package mypackage;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.StreamTokenizer;
import java.util.Scanner; 

public class d {
    public static int max(int a[],int n) //判断大小
    {
        int x=a[0];
        for(int i=0;i<=n;i++)    
        {
            if(a[i]>x) {x=a[i];}                
        }
        return x;
    }
    
    public static int a(int a[],int n)
    {
        int i,j,p=0;
        int[] b=new int [1000];
        for(i=0;i<=n;i++)
        {
            for(j=i;j<=n;j++)
            {
                b[p]=b(a,i,j,n);
                p++;
            }
        }        
        return max(b,p-1);
    }
    
    public static int b(int a[],int i,int j,int n)
    {
        int x,y,p=a[i],q=a[0];
        for(x=i+1;x<=j;x++)
        {
            p=p+a[x];        
        }
        if(i!=j)
        {
            for(y=1;y<=i;y++) 
            {
                q=q+a[y];                
            }
            for(y=j;y<=n;y++)
            {
                q=q+a[y];
            }
        }
        if(q>=p) {p=q;}
        return p;
    }

    public static void main(String[] args) throws IOException {
        Reader r = new BufferedReader(new FileReader("C:\\\\Users\\\\xxoo\\\\Desktop\\\\新建文本文档.txt"));
        StreamTokenizer stok = new StreamTokenizer(r);
        stok.parseNumbers();
        int[] sum=new int [1000];
        int i=-1;
        stok.nextToken();
        while (stok.ttype != StreamTokenizer.TT_EOF) {
          if (stok.ttype == StreamTokenizer.TT_NUMBER)
          {  
              i++;
            sum[i] = (int) stok.nval;
          }
          else
            System.out.println("Nonnumber: " + stok.sval);
          stok.nextToken();
        }//读取
        System.out.println(a(sum,i));
    
    }
}

 二维数组四个数字可以控制一个矩形。

package mypackage;
import java.util.Scanner; 
public class c {
    public static int a(int c[][],int i,int j) 
    {
        int m,n,x,y,p=0;
        int[] sum=new int [1000];
        for(m=0;m<=i;m++)
        {
            for(n=m;n<=i;n++)
            {
                for(x=0;x<=j;x++)
                {
                    for(y=x;y<=j;y++)
                    {
                        sum[p]=b(c,m,n,x,y);
                        p++;
                    }
                }
            }
            
        }
        
        return max(sum,p);
    }
    
    public static int b(int b[][],int m,int n,int x,int y)
    {
        int a=b[m][x];
        for(int i=m;i<=n;i++)
        {
            for(int j=x;j<=y;j++)
            {
                a=a+b[i][j];
            }
        }
        return a-b[m][x];
    }
    
    public static int max(int a[],int n) //判断大小
    {
        int x=a[0];
        for(int i=0;i<=n;i++)    
        {
            if(a[i]>x) {x=a[i];}                
        }
        return x;
    }
    
    
    public static void main(String[] args){
        int[][] a=new int [1000][1000];
        int x,y;

        Scanner sc2 = new Scanner(System.in); 
        Scanner sc3 = new Scanner(System.in); 
        System.out.println("请输入行数和列数:");
        x=sc2.nextInt(); 
        y=sc3.nextInt(); 
        System.out.println("请输入数组:");
        Scanner sc1 = new Scanner(System.in);
        for(int i=0;i<=x-1;i++)
        {
            for(int j=0;j<=y-1;j++)
            {       
                
                a[i][j]= sc1.nextInt(); 
            }
        }
        System.out.println(a(a,x-1,y-1));

    }
}
原文地址:https://www.cnblogs.com/sonofdemon/p/10590645.html