软件工程个人作业04

设计思路:

计算前i-1个数的和,如果他们的和加上第i个的和大于第i个数,那么保留和,如果是小于的话就让最大值等于第i个数的值,这样依次类推,可以得到最大的和。

出现的问题:

如果第i个数为负数的话,这样有可能导致最后加上一个负数,使最大和值变小

可能的解决方案:

定义一个变量记住加上负数之前的值。

源代码:

import java.util.Scanner;

public class Maxsum {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int max,a;
        System.out.println("请输入数字的长度:");
        Scanner sc1 = new Scanner(System.in);
        int size = sc1.nextInt();
        int num[]=new int [size];
        System.out.println("请输入数字:");
        for(int i=0;i<size;i++)
        {
            num[i]=sc1.nextInt();
        }
        max=num[0];
        a=num[0];
        for(int i=1;i<size;i++)
        {
            if(max+num[i]>=num[i])
            {
                if(num[i]<0&&a<max+num[i])
                    a=max;
                max=max+num[i];                
            }
            else
                max=num[i];
        }
        if(a>max)
            max=a;
        System.out.print(max);

    }

}

结果截图

总结:

最开始看到题目的时候想的是两个for循环嵌套着做,但是题目要求复杂度为n,在老师的提示下想到这个方法,写程序之前要多思考这样才能设计出简便又节省空间的程序,对于之前学习的数据结构应该好好融会贯通。

原文地址:https://www.cnblogs.com/1443188449qq/p/5368031.html