zoukankan      html  css  js  c++  java
  • 课堂作业03

    设计思路:

    (1)将原数组扩展;扩展为原来的2倍减1。

    (2)第一个for循环控制数组从哪一数开始进行最大子数组的求和。长度为原数组的长度。

    (3)第二个for循环为动态规划求最大子数组。长度为原数组的长度减1.

    (4)将求得的最大和用一个数组存储。求该数组的最大值。即为循环数组的子数组的最大和。

    源代码:

    import java.util.Scanner;
    public class MaxOfSubArray2 {
    	public static int Max1(int arr1[])
    	{
    		int arr2[]=new int[2*arr1.length-1];
    		for(int i=0;i<arr1.length;i++)
    		{
    			arr2[i]=arr1[i];
    		}
    		for(int j=0;j<arr1.length-1;j++)
    		{
    			arr2[j+arr1.length]=arr1[j];
    		}//扩展数组
    		int maxsum0=0;
    		int maxsum1=0;
    		int maxsum[]=new int[arr1.length];
    		for(int k=0;k<arr1.length;k++)//从哪一个数开始
    		{
    			int sum=arr1[k];
    		    maxsum1=arr1[k];
    			for(int m=k+1;m<arr1.length+k;m++)//动态规划求最大和
    			{
    				
    			    if(sum<0)
    			    {
    			    	sum=0;
    			    }
    			    sum+=arr2[m];
    			    if(sum>maxsum1)
    				{
    					maxsum1=sum;
    				}
    			}
    			maxsum[k]=maxsum1;
    		}
    		for(int n=1;n<maxsum.length;n++)
    		{
    			if(maxsum[n]>maxsum[0])
    			{
    				maxsum0=maxsum[n];
    			}
    		}
    		return maxsum0;
    		
    	}
    	public static void main(String[] args)
    	{
    		Scanner sc=new Scanner(System.in);
    		System.out.println("请输入数组长度:");
    		int n=sc.nextInt();
    		int arr[]=new int[n];
    		System.out.println("请输入数组元素:");
    		for(int i=0;i<n;i++)
    		{
    			arr[i]=sc.nextInt();
    		}
    		System.out.println("子数组的最大和:"+Max1(arr));
    	}
    	
    
    }
    

     程序截图:

    编译过程中的错误:将maxsum1=arr[k]写到内循环去了。

    六,团队照

  • 相关阅读:
    2015 ACM/ICPC Asia Regional Changchun Online HDU 5444 Elven Postman【二叉排序树的建树和遍历查找】
    JDBC连接MySQL数据库
    MySQL实习训练1
    I Hate It
    Just a Hook
    Mayor's posters
    asd的甩锅计划
    程序员的恋情
    Radical and array
    Highways
  • 原文地址:https://www.cnblogs.com/ygl888/p/5388515.html
Copyright © 2011-2022 走看看