标签:
一、题目:n返回一个整数数组中最大子数组的和。
二、要求:
public class test { public static void main(String[] args) { // TODO Auto-generated method stub int N=20; int n=-20; int m=20; int a[]=new int[N]; Input(a,N,n,m); //随机产生a[N] System.out.println("数组a[N]为:"); for(int i=0;i<N;i++) //输出数组a[N] { System.out.print(a[i]+" "); } System.out.println(); int H[]={a[0],0,0}; for(int i=1;i<=N;i++) //求最大子数组和 { array(a,N); Maxarray(H,3,a,N,i); } System.out.println("最大子数组为:"); if(H[1]>H[2]) { for(int i=H[1];i<N;i++) { System.out.print("a["+i+"] "); } for(int i=0;i<=H[2];i++) { System.out.print("a["+i+"] "); } } else if(H[1]==H[2]) { System.out.print("a["+H[1]+"] "); } else { for(int i=H[1];i<=H[2];i++) { System.out.print("a["+i+"] "); } } System.out.println(); System.out.println("最大子数组和为:"+H[0]); } static void Input(int a[],int N,int n,int m) //随机产生数组a[N] { for(int i=0;i<N;i++) { a[i]=(int)(n+Math.random()*(m-n+1)); } } static void array(int a[],int N) //把数组第一个数放到最后,重新排列数组 { int q=a[0]; for(int i=0;i<N-1;i++) { a[i]=a[i+1]; } a[N-1]=q; } static void Maxarray(int H[],int L,int a[],int N,int m) //对数组求最大子数组,并记录它的最大子数组和,和数组的起始位置 { int Max=a[0]; int A=a[0]; int b=0; int c=0; int d=0; for(int i=1;i<N;i++) { if(A<0) { A=a[i]; if(Max<A) { Max=A; b=i; c=i; d=b; } else { b=i; } } else { if(a[i]<0) { if(Max<A) { Max=A; c=i-1; d=b; } A=A+a[i]; } else { A=A+a[i]; if(Max<A) { Max=A; c=i; d=b; } } } } if(H[0]<=Max) { H[0]=Max; if((d+m)<N) { H[1]=d+m; } else { H[1]=d+m-N; } if((c+m)<N) { H[2]=c+m; } else { H[2]=c+m-N; } } } }
五、程序运行截图:
六、总结:
我负责编程,严雅芳负责测试。
此次编程最大的体会是:没有好的编程思路,拿道题不能尽快的想出解决办法,没有更好的解题思路,没有完成要求。对于自己的思路也不能很好的表达出来,不知道这可不可以在以后锻炼出来。还有感觉自己的程序比别人的复杂,代码行数太多。
标签:
原文地址:http://www.cnblogs.com/fengyutongxing/p/4429111.html