求子数组最大的和
在课上的第一个解法,源代码如下:
package CCC;
import java.util.Scanner;
public class One {
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int[] a = new int[5];
int[] max = new int[5];
max[0] = a[0];
max[1] = a[0]+a[1];
max[2] = a[0]+a[1]+a[2];
max[3] = a[0]+a[1]+a[2]+a[3];
max[4] = a[0]+a[1]+a[2]+a[3]+a[4];
System.out.println("输入五个整数");
for(int i=0;i<=4;i++)
{
a[i] = sc.nextInt();
}
for(int i=0;i<=4;i++)
{
if(a[i]>=max[0]) {
max[0] = a[i];}
}
for(int i=0;i<=3;i++)
{
if(a[i]+a[i+1]>=max[1])
{
max[1]= a[i]+a[i+1];
}
}
for(int i=0;i<=2;i++)
{
if(a[i]+a[i+1]+a[i+2]>=max[2])
{
max[2] = a[i]+a[i+1]+a[i+2];
}
}
for(int i=0;i<=1;i++)
{
if(a[i]+a[i+1]+a[i+2]+a[i+3]>=max[3])
{
max[3] = a[i]+a[i+1]+a[i+2]+a[i+3];
}
}
int x = max[0];
for(int i=1;i<=4;i++)
{
if(max[i]>=x)
{
x = max[i];
}
}
System.out.println("最大子数组的和为:");
System.out.println(x);
}
}
在课上的第二个解法,源代码如下:
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int x;
System.out.println("请输入数组长度");
x = sc.nextInt();
int[] a = new int[x];
System.out.println("输入整数");
for(int i=0;i<=x-1;i++)
{
a[i] = sc.nextInt();
}
int sum = 0 , max = -999;
for(int i=0;i<a.length;i++)
{
sum+= a[i];
max = (max>sum)?max:sum;
if(sum<0) sum=0;
}
System.out.println("最大子数组的和为:");
System.out.println(max);
}