课时作业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 [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数组求最值就行了。处理起来也不难,我很擅长使用循环

不过中间除了一些问题

不过我也学到了,再循环中加入打印(如上图)

这样逐行看显示结果就不会出问题了

有一个错误点很关键,就是千万不要把赋初值语句放进循环中

最后,这种题目非常开发思维,方案我想到了好几种,最后选择了一个我能驾驭的完成。

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