返回一个一维整数数组中最大子数组的和(环)

题目:

返回一个一维整数数组中最大子数组的和。 要求: 输入一个一维整形数组,数组里有正数也有负数。 一维数组首尾相接,象个一条首尾相接带子一样。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。

设计思想:

(1)存在三个一维数组。第一个用于存储 输入的数组;第二个用于存储不同子数组的最大值;第三个用于存储 起始点不同的数组的最大值。

(2)1、定制输入整数的个数

       2、创建第一个一维数组,将数字输入

       3、 利用循环,将所存在的第一个数组的数,进行加法计算,如果和为正数,继续计算;若和为负数,则下一个重新开始计算。所有计算结果放在第二个一维数组中,将第二个数组中,求最大值,放入第三个数组。

       4、在第一个数组中,不同的位置为 计算开始,重复进行 3 。

       5、求出第三个数组的最大值。输出

源代码:

import java.util.Scanner;
public class CircleShuzu
{
    public static void main(String args[])
    {    
        Scanner shu=new Scanner(System.in);
        System.out.println("请输入整数的个数:");
        int count=shu.nextInt();
        while(count<=0)
        {
            System.out.println("输入错误,请重新输入:");
            count=shu.nextInt();
        }
        int Array[]=new int[count];
        int Crray[]=new int[count];
        System.out.println("请输入整数");
        for(int i=0;i<count;i++)
        {
            Array[i]=shu.nextInt();
        }
        
    for(int j=0;j<count;j++)
    {
        int b=1;
        int Brray[]=new int[100];
        Brray[0]=Array[j];
        if(j==count-1)
        {
            for(int i=0;i<count-1;i++)
            {
                if(Brray[b-1]<=0)
                {
                    Brray[b]=Array[i];
                }
                if(Brray[b-1]>0)
                {
                    Brray[b]=Brray[b-1]+Array[i];
                }
                if(i==j-1)
                {
                    break;
                }
                b++;
            }
        }
        for(int i=j+1;i<count;i++)
        {
            if(Brray[b-1]<=0)
            {
                Brray[b]=Array[i];
            }
            if(Brray[b-1]>0)
            {
                Brray[b]=Brray[b-1]+Array[i];
            }
            if(i==count-1)
            {
                i=-1;
            }
            if(i==j-1)
            {
                break;
            }
            b++;
        }
        int Max1=Brray[0];
        for(int i=1;i<count;i++)
        {
            if(Brray[i]>Max1)
            {
                Max1=Brray[i];
            }
        }
        Crray[j]=Max1;
    }
    int Max2=Crray[0];
    for(int m=1;m<count;m++)
    {
        if(Crray[m]>Max2)
        {
            Max2=Crray[m];
        }
    }
    System.out.println("数组最大值为:"+Max2);
    }
}

 

结果截图:

合作过程体会:

通过讨论,我们在之前的题进行了改进,之前的题我们用的是二维数组,这次我们用多个一维数组来解决问题,进一步从不同首项遍历,选取最大值就行了。

两人一起分析程序,李杨编写代码,我复审,遇到错误,共同解决。

冲突解决:

当首项为最后一个数时,跳过了之前设计的循环,从而导致错误。所以给最后的首相列出了单独的计算。

总结:

 两次设计思想差不多。有所改变的是将二维数组改为一维数组,多个数组来储存所需要的值。合作开发能高效率地解决一些问题,方向能够更准确。

posted @ 2016-04-14 18:26  会飞的鱼摆摆  阅读(153)  评论(0编辑  收藏  举报