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 [n];
int C[]=new int [n];
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;i<n;i++)
{
a=a+A[i];
B[i]=a;
}//使得B数组n个从一开始的子数组
C[k]=B[0];
for(int i=k;i<n;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
}//最大的括号
源代码如上
这都是失败的例子,代码中还有很多实验的地方都被我删除了
成功图如下
关于这道题目,简单谈谈我的心路历程
首先审题之后发现是一道有点像是数学题的题目
个人感觉有点难度,不过老师的提醒起了很大作用
就是从第一个数开始,把所有的子数组都确定下来,在比大小
当然我知道,也有其他方式,比如确定子数组累加是否为正,分块等
不过我还是觉得用最笨的方法比较好
因为他繁杂的地方,由电脑来处理(用循环来处理就行了)
其实这道题目的雏形我刚开始的时候就确定了
输入数组的设置花了点时间,因为基本语句都快忘光了。而且要一步一个打印,已确定结果
然后排除掉特殊情况,比如空数组,只有一个数等情况
然后苦于数不好储存,因为要比大小,用循环需要有数来存储
于是我选择的方式是用B数组来存不同长度的子数组
在进行排序,把b数组的最大值赋予c数组
再把c数组求最值就行了。处理起来也不难,我很擅长使用循环
不过中间除了一些问题
不过我也学到了,再循环中加入打印(如上图)
这样逐行看显示结果就不会出问题了
有一个错误点很关键,就是千万不要把赋初值语句放进循环中
最后,这种题目非常开发思维,方案我想到了好几种,最后选择了一个我能驾驭的完成。