软件工程个人作业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

时间: 2024-08-02 02:49:44

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

软件工程概论---环状二维数组最大子数组和

1,题目要求 根据软件工程概论--<环状一维数组最大子数组和>和<二维数组最大子数组和>两篇博客,求环状二维数组的和. 2,思路设计 根据前面两篇博客思路做参考.在二维数组的基础上扩充二维数组的列为2*col-1.再进行二维数组的求和即可. 3,代码 #include <iostream> #include<time.h> using namespace std; #define max(a,b) ((a)>(b)?(a):(b)) #define M

软件工程课堂作业04

软件工程课堂作业04 源代码: 1 package jian; 2 import java.io.*; 3 import java.util.Scanner; 4 public class Point3D{ 5 public static int Lenght(int list[],int lenght) 6 { 7 int i,max; 8 max=list[0]; 9 for(i=1;i<=(lenght-1);i++) 10 { 11 if(list[i]>max) 12 { 13 ma

求一维循环数组最大子数组的和

结对成员:信1201-1班 于海洋   袁佩佩 一.题目与要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 二.设计思路 利用之前的返回一个整数数组最大子数组的和程序的思路,不过这里将数放到一个链表里,首尾相连,来求最大子数组的和. 三.源

结对开发_求一维数组最大子数组和判断溢出

题目 求一维数组最大子数组和 要求:1000个数以上,整数 二.设计思路 最大子数组很好找到,但是子数组和的溢出问题很难解决. 经过不断的思考,我得出了结论: 溢出是程程序设计者设计时的不足所带来的错误.所以设计者要在编码时便高度警惕,预防溢出的发生,这才是最本质的解决问题的方法.就本题而言,我们设置了元素最大个数,以及其它输入要求,尽量避免溢出的发生.1000个数相加可以实现,但非要取1000个最大的数相加,那样的计算没有意义,不会在我们的生活学习中出现,这属于科研问题,交给大神们来解决吧.

一维循环的数组求出最大子数组的和

题目是:一维循环的数组求出最大子数组的和 老师刚给出这个题目时 ,求出一维子数组的最大子数组的和,当时我就想原来已经做过一个求出一维数组的最大子数组的和,能不能在此基础上延伸一下,于是我就想怎样利用原来的算法,后来我就想既然是还是求出最大子数组的和肯定原来的东西可以利用. 我想既然是循环,无外乎就是这个数组进行两遍,所以我感觉这样就可以再在这个数组后面申请一个和它长度相同,数的大小和顺序和它一样的数组,这样就起到了循环的目的,于是我就这样进行了,然后再调用原来的方法,这样就可以求出最大子数组的值

求一个最大子数组的和 Ⅲ

要求: • 输入一个整形数组,数组里有正数也有负数. • 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. • 如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. • 同时返回最大子数组的位置. 求所有子数组的和的最大值.要求时间复杂度为O(n). 设计思路:核心算法同求一个最大子数组的和Ⅱ相同,将所有数组一遍循环改为无限循环,只需选一个时间跳出即可. 具体代码如下: 1 public static void m

突现灵感想出较新简单算法--实现求一数组最大子数组的和

一.题目: 返回一个整数数组中最大子数组的和. 要求: 1.输入一个整形数组,数组里有正数也有负数. 2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 3.求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思路 首先将每一点看成辐射源,没点只能向右辐射找出所有可能的子数组求出最大值,如arr[5]={1,2,3,4,5}.首先1与1+2与1+2+3....到1+2+3+4+5找出最大值存入数组a[0]中. 再由2向右辐射找出所有可能的子数组求出最大值存入a[1]以

求一维数组最大子数组和判断溢出

一题目 一.实验要求 求一维数组最大子数组和 要求:1000个数以上,32位整数 二.设计思路 因为我们的程序一开始就可以运算1000个以上数的运算,最大个数为364,526,269,原因为找出. 这次实验主要目的是解决最大值溢出的问题,本来想输出这个溢出的数值,但没有实现,于是改为若溢出,则输出提示,并返回溢出的上一个最大值. 三.代码 1 // ketang4.cpp : 定义控制台应用程序的入口点. 2 //张世通 梁世豪 3 4 #include "stdafx.h" 5 #i

求首位相连一维数组最大子数组的和

结对成员: 朱少辉:主要负责代码编写 侯涛亮:主要负责程序测试 题目:一个首尾相接的一维整型数组,其中有正有负,求它的最大子数组并返回它的位置. 思路:在求一维子数组的基础上,先输入一个含有N个数的一维数组,将此数组向后平移N个使数组长度变为2N个,前N个和后N个值相等.再求这长度为2N的数组最大子数组之和,也就是求从第i个(i=0,1,2..n-1)到第i+n(不包含i+n)个中求最大的子数组和.这样会从0-N-1产生产生N个最大子数组的和,把这N个值存到另个数组中,求出最大值即为首位衔接一维