本次作业的完成程度停留在课堂上,课下没有对程序进行算法复杂度的补充。
设计思想:本程序的要求是可以求出最大子数组之和。老师给出了一个提示,在不考虑算法复杂的情况下,可以想办法求出所有子数组的和,然后选择出最大的那一个。我便以这个为方向进行编程。首先要得到一个数组,我选择了从键盘输入数组的大小,使用一个循环输入这个数组。又想到需要比较所有子数组和的大小,因此用一个一维数组储存这些数。通过观察,得到子数组个数和原数组大小的关系。而后使用一个两层的循环,来得到所有子数组的和,并储存在一维数组里面。再通过一个循环,得到数组的最大值,至此便得到了最大子数组之和。
出现的问题:由于这个程序不是很复杂,我使用的方法也比较单纯,便没有出现太大的问题。但是,由于一个寒假没有进行编程,导致在写取出一维数组最大值算法的时候耽误了一点时间,,,捞啊。
解决方案:在比大小的算法中,将数组第一个数作为最大值,与而后的每一个元素比较,得到整个数组的最大值。
源代码:
package bigzishuzu;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] num=new int[30];
int n;
int i,j;
int cishu;
int sum;
int max;
max=0;
cishu=0;
System.out.println("请输入数组的个数:");
@SuppressWarnings("resource")
Scanner scan=new Scanner(System.in);
n=scan.nextInt();
int geshu=((1+n)*n)/2;
int [] daxiao=new int[300];
for(i=0;i<n;i++) { //完成数组的的输入
num[i]=scan.nextInt();
}
for(i=0;i<n-0;i++)
{
sum=0;
for(j=i;j<n;j++) {
sum=sum+num[j];
System.out.println("第"+cishu+"个子数组的和为:"+sum);
daxiao[cishu]=sum;
cishu++;
}
}
max=daxiao[0];
for(int l=0;l<geshu;l++) {
if(max<daxiao[l]) {
max=daxiao[l];
}
}
System.out.println("最大子数组和为:"+max);
}
}
Main.java
结果截图:
总结:
以后要多动手进行编程,避免手生。
此程序在时间复杂度这一问题上没有达到标准,将在以后进行补充。