1.问题:大体和前两次的相同,就是把数组首尾相连形成一个环形。
2.思路:这个问题大体和第一个问题的处理方法是一样的,就是这个数组里的每一个数都可以当做首尾,所以我就用一个循环吧数组的每一个数都往后移,最后一个当做第一个。直到每一个数组都做过第一位,就完成了。这样就会得到n个数组,每一个数组都会有一个子数组的最大值。比较就得到了最大的那个值。
3.源代码:
package shuzhu;
import java.util.*;
public class shuzhu {
public static void main(String[] args)
{
Scanner input=new Scanner(System.in);
System.out.print("请输入数组中数的个数:");
int num=input.nextInt();
int max=0;
int maxx=0;
int a[]=new int[num];
for(int i=0;i<num;i++)//循环生成num个随机数
{
if((int)(Math.random()*2)==0)//先从0或1之间生成一个数,进而决定这个数的正负
{
a[i]=(int)(Math.random()*20);
}
else
{
a[i]=-(int)(Math.random()*20);
}
}
for(int p=0;p<num;p++)
{
int w=a[0];
for(int i=0;i<num-1;i++)
{
a[i]=a[i+1];
}
a[num-1]=w;
System.out.println("\r");
for(int i=0;i<num;i++)//循环输出生成的num个随机数
{
System.out.println(a[i]);
}
for(int b=0;b<num;b++)//最外层循环控制这个子数组的头
{
for(int c=b;c<=num;c++)//中层循环控制这个子数组的尾
{
int sum=0;
for(int d=b;d<c;d++) //内层循环从头加到尾
{
sum=sum+a[d];
if(max<=sum)//通过比较把最大的子数组和赋给max
{
max=sum;
}
}
}
}
System.out.print("该子数组和的最大值为:"+max);
if(maxx<=max)
{
maxx=max;
}
}
System.out.println("\r");
System.out.print("总子数组和的最大值为:"+maxx);
}
}
4.测试截图