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

一、题目要求

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

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

每个元素是int32 类型的;

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

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

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

结果溢出之后能判断。

二、设计思想

  在我们的前一个程序中,由于int类型rand()随机产生数范围是0~32767,所以产生的1000个数较小,不会产生溢出。但我们通过查资料得知int32最大数是2147360000即2^31,如果结果溢出则提示溢出。

三、源代码

 1 #include<iostream.h>
 2 #include<stdlib.h>
 3 #include<time.h>
 4 void main()
 5 {
 6     while(1)
 7     {
 8         int length,temp;
 9         int *arr=new int[length];
10         cout<<"请输入该数组长度:";
11         cin>>length;
12         //cout<<"请输入该数组:";
13         srand((unsigned)time(NULL));
14         for(int i=0;i<length;i++)
15         {
16             arr[i]=rand()*10000;
17             temp=rand()%2;
18             if(temp==0)
19             {
20                 arr[i]=arr[i];
21             }
22             else
23             {
24                 arr[i]=-arr[i];
25             }
26             cout<<arr[i]<<"\t";
27         }
28         int result = arr[0];
29         int sum = arr[0];
30         for(i=1;i<length;i++)
31         {
32             if (sum > 0)
33             {
34                 sum += arr[i];
35             }
36             else
37             {
38                 sum =arr[i];
39             }
40             if (sum >result)
41                 result = sum;
42         }
43         if(result<2147360000||result==2147360000)
44         {
45             cout<<"该数组中最大连续子数组之和是:"<<result<<endl;
46         }
47         else
48         {
49             cout<<"超出最大范围溢出!"<<endl;
50         }
51         cout<<"----------------------------------------"<<endl;
52     }
53 }

四、结果截图

五、实验体会

  以前我们做实验的时候,总是想的太天真,理所当然的认为用户输入的一定是按我们的要求输入的,但现实情况却绝非如此,对于大数溢出问题我们考虑不周,还有其他的细节问题我们有很多没有考虑到。当输入数组的长度较大时,很可能会溢出,以后要多多注意!

六、合作照片

时间: 2024-10-25 17:20:26

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

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

一.团队成员: 檀威,陈志利 二.项目名: 求一个数组中连续最大子数组之和 三.我们的设计思路: 设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]来做

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

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 要求程序必须能处理1000 个元素: 每个元素是int32 类型的: 输入一个整形数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为O(n): 结果溢出之后能判断. 二.设计思想 在求最大连续子数组时同样用动态法,对于新增的要求,可以增大随机产生数的倍数,如果结果溢出则输出溢出提示字样,其中int类型rand()随机产生数范围是0~32767,i

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