首页 > 代码库 > 软件工程个人作业04(求数组最大子数组的和)

软件工程个人作业04(求数组最大子数组的和)

  题目:返回一个整数数组中最大子数组的和。

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

程序设计思想:程序中使用到一个用来求数组的最大子数组和的函数,这里可以将原数组的前n-1项加到数组的后面,形成一个新的数组,这样就可以求这种首尾相连的数组的最大子数组和了。

源代码:


public class zishuzu {

    /**
     * @param args
     */
    
public static int max(int array[])
{
    int Max=0;
    int sum=0;
    int len;
    len=array.length;
    for(int i=0;i<len;i++)
    {
        sum+=array[i];
        if(sum>Max)
        {
            Max=sum;
        }
        if(sum<0)
        {
            sum=0;
        }
    }
    return Max;
    
}
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int a[]={1,2,-3,5,7,-8};
        System.out.print("测试数组为:");
        for(int i=0;i<a.length;i++)
        {
            System.out.print(a[i]+",");
        }
        System.out.println("");
        System.out.println("该数组最大子数组的值为:"+max(a));
        int b[]={1,2,-3,5,7,-8,1,2,-3,5,7};
        System.out.print("将数组首尾相连后,数组等价于:");
        for(int k=0;k<b.length;k++)
        {
            System.out.print(b[k]+",");
        }
        System.out.println("");
        
        System.out.println("该数组最大子数组的值为:"+max(b));

    }
    
}



试验结果截图:

技术分享

 周活动总结表:

日期/任务

听课

阅读课本

课下学习

 

日总计

周日3.26

 

 

 

 

 

周一

120m

30m

30m

 

150m

周二

 

 

40m

 

40m

周三

 

 

50m

 

50m

周四

120m

40m

20m

 

180m

周五

 

 

40m

 

40m

周六

 

 

40m

 

40m

周总计

240m

70m

2100m

 

540m

 

时间记录日志:

日期

开始时间

结束时间

中断时间

净时间

活动

备注

C

U

3.6

14:00

16:00

10m

110m

上课,编程

软件工程课

 

 

3.7

19:00

21:00

20m

100m

看书,编程

写软件工程作业

 

 

3.8

19:00

21:00

15m

105m

看书,编程

javaweb

 

 

3.9

16:00

18:00

10m

110m

上课

Javaweb上课

 

 

3.10

18:00

20:00

30m

90m

构思,写java

写四则运算程序3

 

 

软件工程个人作业04(求数组最大子数组的和)