01个人作业课堂——求最大子数组的和02

 

 

代码:

package bean;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;

/**
 * @version 1.0
 * @Author: wuyi
 * @date 2022/3/18 11:05
 */
public class Three {
    public static void main(String[] args) {
        String[] words = new String[1000];
        int m = 0;
        int length = 0;
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("src/main/java/bean/aa.txt")));
            String linestr;
            while ((linestr = br.readLine()) != null) {
                words[m++] = linestr;
                length++;
            }
            br.close();
        } catch (Exception e) {
            System.out.println("文件操作失败");
            e.printStackTrace();
        }

        String[] arr1 = words[0].split(",");//提行数
        int[] b1 = new int[arr1.length];
        int i;
        int j;
        for (j = 0; j < b1.length; j++) {
            b1[j] = Integer.parseInt(arr1[j]);
        }

        String[] arr2 = words[1].split(",");//提列数
        int[] b2 = new int[arr2.length];
        for (j = 0; j < b2.length; j++) {
            b2[j] = Integer.parseInt(arr2[j]);
        }

        int t=2;
        int[][] a3 = new int[100][100];
        for (i = 0; i < b1[0]; i++) {
            String[] arr3 = words[t].split(",");
            for (j = 0; j < arr3.length; j++) {
                a3[i][j] = Integer.parseInt(arr3[j]);
            }
            t++;
        }

        int Sum = 0;
        int maxSum = 0;
        int p;
        for (p = 0;p<b1[0];p++) {//按单行算
            for (j = 0; j < b2[0]; j++) {
                for (i = j; i < b2[0]; i++) {
                    Sum += a3[p][i];
                    if (Sum > maxSum) {
                        maxSum = Sum;
                    }
                    if (Sum < 0) {
                        Sum = 0;
                    }
                }
                Sum = 0;
            }
        }
        if (maxSum == 0) {
            for (p = 0; p < b1[0]; p++) {
                for (i = 0; i < b2[0]; i++) {
                    if (i == 0) {
                        maxSum = a3[p][i];
                    }
                    if (a3[p][i] > maxSum) {
                        maxSum = a3[p][i];
                    }
                }
            }
        }

        for (p = 0;p<b2[0];p++) {//按单列算
            for (j = 0; j < b2[0]; j++) {
                for (i = j; i < b1[0]; i++) {
                    Sum += a3[i][p];
                    if (Sum > maxSum) {
                        maxSum = Sum;
                    }
                    if (Sum < 0) {
                        Sum = 0;
                    }
                }
                Sum = 0;
            }
        }
        if (maxSum == 0) {
            for (p = 0; p < b2[0]; p++) {
                for (i = 0; i < b1[0]; i++) {
                    if (i == 0) {
                        maxSum = a3[i][p];
                    }
                    if (a3[p][i] > maxSum) {
                        maxSum = a3[p][i];
                    }
                }
            }
        }

        int s1;
        int s2 = 0;
        int s3 = 0;
        int l;
        if(b1[0]<b2[0]){
            s1=b2[0];
        }
        else{
            s1=b1[0];
        }
            for (j = 0; j < b2[0]; j++) {//按多行和多列算
                for (i = j; i < s1; i++) {
                    for(l=0;l<i+1;l++){
                        s2+=a3[i][l];
                        s3+=a3[l][i];
                    }
                    Sum = Sum+a3[i][i]+s2+s3;
                    if (Sum > maxSum) {
                        maxSum = Sum;
                    }
                    if (Sum < 0) {
                        Sum = 0;
                    }
                }
                Sum = 0;
            }
//        if (maxSum == 0) {
//            for (p = 0; p < b1[0]; p++) {
//                for (i = 0; i < b2[0]; i++) {
//                    if (i == 0) {
//                        maxSum = a3[p][i];
//                    }
//                    if (a3[p][i] > maxSum) {
//                        maxSum = a3[p][i];
//                    }
//                }
//            }
//        }

        System.out.println(maxSum);
//        for (i = 0; i < b1[0]; i++) {
//            for (j = 0; j < b2[0]; j++) {
//                System.out.println(a3[i][j]);
//            }
        }
    }

 

posted @ 2022-03-19 19:29  无衣123  阅读(17)  评论(0)    收藏  举报