zoukankan      html  css  js  c++  java
  • 软件工程个人作业05

    设计思路:

    一个数组首尾相接来找和最大的子数组,我认为就是寻找一个能产生和最大子数组的一种数组的最大排列,即去掉最小的负数。若数组中都是正数,所有数相加就能和最大,若数组中有负数,则去掉最小的负数,在剩下的子数组中找一个和最大的子数组。去掉最小负数的方法就是遍历数组,找到最小值,把其放在数组的首位或者是末位就可以了。

    源代码:

    import java.util.*;
    
    public class ArrayMax {
        public static void main(String args[])
        {
            Scanner input = new Scanner(System.in);
            System.out.print("请输入数组的长度:");
            int n = input.nextInt();
            
            int data[] = new int[n];
            int array[] = new int[n];
            System.out.print("请输入数组:");
            for(int i=0;i<n;i++)
            {
                data[i] = input.nextInt();
            }
            
            int sum = 0;
            int min = data[0];
            int number = 0;
            
            for(int i=0;i<n;i++)
            {
                if(min>data[i])
                {
                    min = data[i];
                    number = i;
                }
            }
    
            for(int i=number;i<n;i++)
            {
                array[i-number] = data[i];
            }
            for(int i=0;i<number;i++)
            {
                array[i+n-number] = data[i];
            }
            
            int max = min;
            for(int i=0;i<n;i++)
            {
                sum = sum + array[i];
                
                if(sum>max)
                {
                    max = sum;
                }
                
                if(sum<0)
                {
                    sum = 0;
                }
            }
            System.out.println("所有子数组的和的最大值为:"+max);
        }
    }
    View Code

    结果截图:

     

  • 相关阅读:
    2020软件工程作业05
    一、uart&tty驱动
    柔性数组使用备忘
    指针和数组备忘
    计算信息帧的校验和(备忘)
    Linux系统vim几个常见配置
    C语言实现过滤ASCII在0~127范围内的字符,并去除重复的字符
    extern "C"的用法
    strtol详解
    将一个十进制整数转换为二进制并输出
  • 原文地址:https://www.cnblogs.com/xiaosongbiog/p/5397290.html
Copyright © 2011-2022 走看看