个人作业环形数组求最大子数组和

    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("
");
     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("
");
     System.out.print("总子数组和的最大值为:"+maxx);
     }  
     }

  4.测试截图

原文地址:https://www.cnblogs.com/xuange1/p/10589952.html