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; }*/ } }
完善代码的过程中还发现第一阶段的一个问题,呃,也不算是发现了问题,只是之前的一直没改,就是全是负数的情况,之前知道这个问题,但是因为是自己定义的数组,肯定会有正数存在,所以因为就算懒了一下,然后借鉴了一下同学的第一阶段。
浙公网安备 33010602011771号