zoukankan      html  css  js  c++  java
  • 软件工程个人作业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,在老师的提示下想到这个方法,写程序之前要多思考这样才能设计出简便又节省空间的程序,对于之前学习的数据结构应该好好融会贯通。

  • 相关阅读:
    Redis(八)理解内存
    Redis(七)Redis的噩梦:阻塞
    Redis(六)复制
    Redis(五)持久化
    笔试面试经典问题
    两个栈实现一个队列
    单链表相关操作
    我的笔记本
    10进制正整数转4位定长的36进制字符串
    微软2016校园招聘在线笔试之Magic Box
  • 原文地址:https://www.cnblogs.com/1443188449qq/p/5368031.html
Copyright © 2011-2022 走看看