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]写到内循环去了。

    六,团队照

  • 相关阅读:
    EMVTag系列15《选择应用响应数据》
    EMVTag系列14《支付环境响应数据》
    EMVTag系列13《脱机PIN》
    EMVTag系列9《卡片管理数据》
    EMVTag系列7《静态签名数据》
    EMVTag系列6《IAC 发卡行行为代码》
    EMVTag系列2《磁条等效数据》
    code1169 传纸条
    关于 变量越界
    code1039 数的划分
  • 原文地址:https://www.cnblogs.com/ygl888/p/5388515.html
Copyright © 2011-2022 走看看