课时作业3

课时作业3

 课时作业三主要写方法,实现呢,做不到

首先第一点可以肯定的是,如何把所有的数据都涵盖在内容那个里面这个很重要,就是如何完美遍历

这里采用的方法是,以行带点。先把每一行的最大子数组求出来,这个好求,用之前的算法即可

然后第一行和第二行相加得出一个新行,再求这一行的最大子数组,然后第一行第二行第三行都相加求最大的子数组。

然后第一行加加加加加,一直加到最后一行都加上,再求最大子数组。

然后从第二行开始,再加上第三行如此循环

还记得一位数组怎么求最大子数组吗,就是这样的反复加法遍历循环,一共相加n-1的阶乘次就行了

这样一共可以获得n+(n-1)!个数,求这些数中的最大值就行了

这样的书一定是涵盖所有情况的

代码如下

import java.util.Scanner;

public class shuzu {//最大的括号

    public shuzu() {
        // TODO Auto-generated constructor stub
    }

    public static void main(String[] args)
    {//1
        int max=0;int sum=0;
        Scanner scanner=new Scanner(System.in); 
        System.out.println("输入数组长度");
        int n=scanner.nextInt();
        System.out.println(n);
        System.out.println("输入一个数组");
        int A[]=new int [n];
        int B[]=new int [100];
        int C[]=new int [100];
        for(int i=0;i<n;i++)//这一步之前都是把数组输入
        {A[i]=scanner.nextInt();}
        
        if(A.length==0)
        {max=0;System.out.println(max);}
        else if(A.length==1)
        {max=A[0];
        System.out.println(max);}//这里是把数组长度为0和为1的情况算进去了
        
        
        
        
        
        else {//2
            for(int k=0;k<n;k++) {//3
            for(int i=k,a=0,b=0;i<n+k;i++)
            {if(i<=n)
                {a=a+A[i];
                B[i]=a;}
            else {a=a+A[i]+A[b];
                 B[i]=a;b++;}
                
            }//使得B数组n个从一开始的子数组
            C[k]=B[0];
            for(int i=k;i<n+k;i++)
            {
            if(B[i]>C[k])
                C[k]=B[i];}
            
            }//3排序使得B中的最大值为c【n】,从一开始是c【1】;
        }//2
    max=C[0];
    for(int i=1;i<n;i++)
    {
        
        if(C[i]>max)
        {max=C[i];}
        
        
        
        //System.out.println(max);用这个来查看计算结果
    }
    System.out.println(max);
    }//1
}//最大的括号
这是一维的因为二维的怎样都无法实现,就先这样放着吧,想这种方法也是费了很大功夫呢
成功实现之后在放图和二维代码

然后从文件中读取的话,只要得到对角的角标就可以确定行列变换了

也是,遍历后读取,只要能读取进去,用上述方法就可以计算了

原文地址:https://www.cnblogs.com/jyt123/p/10589610.html