个人作业环形数组求最大子数组和
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.测试截图