软件工程结对开发之求一维数组中连续最大子数组之和2

一、题目要求

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

要求:

要求程序必须能处理1000 个元素;

每个元素是int32 类型的;

输入一个整形数组,数组里有正数也有负数;

数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和;

求所有子数组的和的最大值。要求时间复杂度为O(n);

结果溢出之后能判断。

二、设计思想

在求最大连续子数组时同样用动态法,对于新增的要求,可以增大随机产生数的倍数,如果结果溢出则输出溢出提示字样,其中int类型rand()随机产生数范围是0~32767,int32最大数是2147360000。

三、代码

#include<iostream.h>
#include<stdlib.h>
#include<time.h>
void main()
{
    while(1)
    {
        int length,temp;
        int *arr=new int[length];
        cout<<"请输入该数组长度:";
        cin>>length;
        //cout<<"请输入该数组:";
        srand((unsigned)time(NULL));
        for(int i=0;i<length;i++)
        {
            arr[i]=rand()*10000;
            temp=rand()%2;
            if(temp==0)
            {
                arr[i]=arr[i];
            }
            else
            {
                arr[i]=-arr[i];
            }
            cout<<arr[i]<<"\t";
        }
        int result = arr[0];
        int sum = arr[0];
        for(i=1;i<length;i++)
        {
            if (sum > 0)
            {
                sum += arr[i];
            }
            else
            {
                sum =arr[i];
            }
            if (sum >result)
                result = sum;
        }
        if(result<2147360000||result==2147360000)
        {
            cout<<"该数组中最大连续子数组之和是:"<<result<<endl;
        }
        else
        {
            cout<<"超出最大范围溢出!"<<endl;
        }
        cout<<"----------------------------------------"<<endl;
    }
}

四、测试截图

当输入数组长度为1000时没有溢出

当输入数组长度为2000时发生溢出

五、总结

以前没考虑到内存溢出情况,现在考虑溢出就得增大范围,溢出是个常见的问题,以后需要注意这种情况,对于溢出没办法解决只能提示溢出,在产生随机数时用的直接乘以10000导致产生的数后四位都是0000,有缺陷有待进一步改进。

六、工作合影

时间: 2024-08-03 18:17:03

软件工程结对开发之求一维数组中连续最大子数组之和2的相关文章

软件工程结对开发之求一个数组中连续最大子数组之和

一.团队成员: 檀威,陈志利 二.项目名: 求一个数组中连续最大子数组之和 三.我们的设计思路: 设sum[i]为以第i个元素结尾且和最大的连续子数组.对于元素i,所有以它前面的元素结尾的子数组的长度都已经求得,那么以第i个元素结尾且它们之和最大的连续子数组要么是以第i-1个元素结尾且它们之和最大的连续子数组加上这个元素,要么是只包含第i个元素,即sum[i] = max(sum[i-1] + arr[i], arr[i]).可以通过判断sum[i-1] + arr[i]是否大于arr[i]来做

3、软件工程结对开发之求一维数组中连续最大子数组之和并判断溢出

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 要求程序必须能处理1000 个元素: 每个元素是int32 类型的: 输入一个整形数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为O(n): 结果溢出之后能判断. 二.设计思想 在我们的前一个程序中,由于int类型rand()随机产生数范围是0~32767,所以产生的1000个数较小,不会产生溢出.但我们通过查资料得知int32最大数是2147

5、软件工程结对开发之求一维数组中连续最大子数组之和

一.题目:返回一个二维整数数组中最大子数组的和.二.要求:输入一个二维整形数组,数组里有正数也有负数.二维数组首尾相接,象个一条首尾相接带子一样.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n). 三.设计思想 这个实验是在前几次实验的基础上,利用动态数组,为了满足首尾相连,所以在计算一次之后,要把该数放在数组的最后边,这样循环遍历最后求出最大子数组的和. 四.源代码 1 #include <iostream.h> 2 int

软件工程结对开发之求二维数组中连续最大子数组之和2

一.题目要求 题目:返回一个二维整数数组中最大子数组的和. 要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思路 先调用以前求二维最大连续子数组之和的maxSubArray函数求一个首尾不相邻的二维最大连续子数组之和,接着用将第k列各元素左移一列可以再求一个最大连续子数组之和 ,循环m次(因为原二维数组有m列)求得每个

软件工程结对开发之求一个或者多个数组中连续最大子数组之和3

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思想 三.代码 四.截图 五.总结 六.工作合影

返回一个二维整数数组中的最大子数组之和(环)

要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 思路: 根据前几次所做的关于一维及二维数组的思路,将其整合. 把二维数组转换成一维数组,再用求一维数组最大子数组和(环)的方式求解 1 #include<iostream> 2 #include<cstdio> 3 #include<ctime> 4 using namespac

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

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

结对开发四------求一维无头数组最大子数组的和

一.代码思想 对第一次一维数组的延伸,增加无头无尾功能,我们的设计思想是每比较一次进行一次交换,将第一个掉到位后去第二个调到第一个,第三个调到第二个,以此类推,再进行实验一的求最大子数组的和 二.代码 package com.minirisoft; import java.util.*; public class SuperMax { public static int Exchange(int arr[],int n) { int t; for(int j=0;j<n-1;j++) { t=a

求数组中的最大子数组4

#include<iostream>#define N 100#include<ctime>using namespace std; typedef struct{ int d[N];  int a[N][N];  int x; }A;void set(A &shu, int x, int y)//x,y分别是行数和列数{  shu.x = x*y;  srand((unsigned)time(NULL));  for(int i = 1; i <= shu.x; i