课堂测试总结-数组(三)
这节课,我们在原数组的基础上做了改进,即将数组首尾相接然后求最大子数组,刚开始我看到题目时想到的是首尾相连后的新数组的子数组,并求出所有子数组得值填入新数组,并用冒泡排序进行排序,求得最大子数组的值,但是事实却繁琐,很麻烦。之后很多同学上讲台演示自己的代码,一个同学说除了自己的想法,就是将所求的数组后面再加上自己本身,但舍去最后一个值。即n-1个数。之后弄原来的办法进行求所有子数组,加入到新数组中,这样很简单,而且很明了,10分钟就完成了整个测试。源代码如下:
package test;//数组首尾相接
import java.util.Scanner;
public class shuzu3 {
public static void main(String []args)
{
Scanner s=new Scanner(System.in);
System.out.println("请输入数组数目:");
int sum=s.nextInt();
int []a=new int[sum];
System.out.println("请输入"+sum+"个数:");
for(int i=0;i<sum;i++)
{
a[i]=s.nextInt();
}
s.close();
int []b=new int[2*sum-1];
for(int i=0;i<sum;i++)
{
b[i]=a[i];
}
for(int i=sum;i<2*sum-1;i++)
{
b[i]=a[i-sum];
}
int []c=new int[sum*sum];
int temp1=0;
for(int i=0;i<sum;i++)
{
int temp=0;
for(int k=i;k<i+sum;k++)
{
temp=temp+b[k];
c[temp1]=temp;
temp1++;
}
}
for(int i=0;i<sum*sum-1;i++)
for(int k=0;k<sum*sum-1-i;k++)
{
if(c[k]<c[k+1])
{
int temp2=c[k];
c[k]=c[k+1];
c[k+1]=temp2;
}
}
System.out.println("最大的子数组和为"+c[0]);
}
}
结果: