3.18随堂作业

 

 

 

 

 

 昨天看题就是将第二阶段看成了是求二维数组的最大子数组,所以说昨天也就没发博客。

今天把代码的内容完善了一下,用的方法比较笨,算是穷举吧,各位大哥看代码

import java.io.*;
import java.util.Scanner;

public class Int_Test2 {
    public static void main(String[] args) throws IOException {
        String fileName = "D:\\input.txt";
        File file = new File(fileName);
        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);
        String line;
        StringBuilder number = new StringBuilder("");
        while ((line = br.readLine()) != null) {
            // 一行一行地处理...
//            System.out.println(line);
            number.append(line);
        }

        String[] split = number.toString().split(",");
        int x=Integer.parseInt(split[0]);
        int y=Integer.parseInt(split[1]);
        Scanner sc = new Scanner(System.in);
//        System.out.println("请输入一个二维数组");
        int max = -2147483648;
        int kuai = (y * (y + 1)) / 2;
        int[][] z = new int[x][y];
        int[][] b = new int[x][(y * (y + 1)) / 2];
        int inn=2;

        for(int i=0;i<x;i++){
            for(int j=0;j<y;j++){
                z[i][j]=Integer.parseInt(split[inn]);
                inn++;
            }
        }

        /*for (int i = 0; i < x; i++) {
            for (int j = 0; j < y; j++) {
                z[i][j] = sc.nextInt();
            }
        }*/

        for (int i = 0; i < x; i++) {
            int[] a = new int[y];
            int index = 0;
            int[] c = new int[(y * (y + 1)) / 2];
            for (int j = 0; j < y; j++) {
                a[j] = z[i][j];
            }
            for (int j = 0; j < y; j++) {
                int sum = 0;

                for (int k = j; k < y; k++) {
                    sum += a[k];
                    c[index] = sum;
                    index++;
                }
            }
            for (int j = 0; j < kuai; j++) {
                b[i][j] = c[j];
            }
        }

        for (int i = 0; i < kuai; i++) {
            int index;
            int[] a = new int[x];
            for (int j = 0; j < x; j++) {
                a[j] = b[j][i];
            }
            index = max(a);
            if (index > max) {
                max = index;
            }
        }

        System.out.println(max);



    }

        public  static  int max(int[] n){
            int sum = 0, maxA = -99999999;
            for (int i = 0; i < n.length; i++) {
                sum += n[i];
                maxA = Math.max(maxA, sum);
                if (sum < 0) sum = 0;
            }
            return maxA;

       /* int[] x= new int[100];
        int y=0;
        for (int i = 0; i < n.length; i++) {
            for (int j = 0; j < n.length; j++) {
                if (n[j] > 0) {
                    x[i] += n[j];
                }
                if (x[i] > 0 && n[j] <= 0) {
                    int b = 0;
                    for (int k = j; k < n.length; k++) {
                        b += n[k];
                        if (b > 0) {
                            x[i] += b;
                            j = k;
                            break;
                        }
                    }
                    i++;
                }
            }
            break;
        }
        for(int i=0;i<n.length;i++){
            if(x[i]>y){
                y=x[i];
            }
        }
        return y;*/

    /*public static int[] max1(int[] x)
    {
        int index=0;
        int n=x.length;
        int [] y=new int[(n*(n+1))/2];
        for(int i=0;i<x.length;i++)
        {
            int sum=x[i];
            y[index]=x[i];
            index++;

            for(int j=i+1;j<x.length;j++)
            {
                y[index]=sum+x[j];
                index++;
            }
        }
        return y;
    }*/


    }
}

完善代码的过程中还发现第一阶段的一个问题,呃,也不算是发现了问题,只是之前的一直没改,就是全是负数的情况,之前知道这个问题,但是因为是自己定义的数组,肯定会有正数存在,所以因为就算懒了一下,然后借鉴了一下同学的第一阶段。

posted on 2022-03-19 22:39  付治齐吖  阅读(25)  评论(0)    收藏  举报