结对开发4----最大子数组(大数溢出)

结对成员:范德一,赵永恒

一.题目:

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

二.要求:

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

  每个元素是int32 类型的;

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

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

  求所有子数组的和的最大值。

三.设计思路

在上一次的实验中,我们设置的数组的个数能够很好的进行扩展,所以对于第一个要求处理1000个元素比较容易实现;对于第二个要求,我们主要是想确定最大的数到底有多大,即什么时候会发生溢出的问题,当问题出现时程序怎么处理,通过查阅资料,我们最后确定了程序能够处理的最大数的取值,然后通过输出语句提示数组溢出。

四.源代码

#include<iostream.h>
#include<time.h>
#include<stdlib.h>

int main()
{   

	srand((unsigned)time(NULL));

	int a[1000];
	int m;              //m是每组个数
    int *sum=new int[1000];
	cout<<"*********************************"<<endl;
	for(int i=0;i<1000;i++)
	{
		int b;
	    b=rand()%2;
	    switch (b)
		{
        	case 0:
		            a[i]=rand()*350;
		            break;
	        case 1:
		            a[i]=-rand()*100;
		            break;
		}
	    cout<<a[i]<<"   ";
	    if((i%10)==9)
		cout<<endl;         //每行10个输出,换行

	}

	cout<<"*********************************"<<endl;
	int he=0;
	for(m=1;m<1001;m++)
	{
		int temp=0;
		for(int n=0;n<m;n++)
		{
			temp=temp+a[n];
		}
		for(int k=0;k<=(1000-m);k++)
		{
			sum[k]=0;
			for(int j=k;j<(k+m);j++)  //a[k]是每组第一个数
			{
				sum[k]=sum[k]+a[j];
			}
			if(sum[k]>temp)
			{
				temp=sum[k];
			}
		}
        if(temp>he)
		{
			he=temp;
		}
	}
	if(he>2100000000)
	{
		cout<<"数组溢出!"<<endl;
	}
	else
	{
	    cout<<"最大子数组的和为: "<<he<<endl;
	}
	cout<<"*********************************"<<endl;
	return 0;
}

五.运行截图

附:

时间: 2024-12-29 23:14:01

结对开发4----最大子数组(大数溢出)的相关文章

软件工程结对开发——一维最大子数组求和溢出问题

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 要求程序必须能处理1000 个元素: 每个元素是int32 类型的: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思路 将数组第一个和第二个数置为2的63次方,观察结果是否溢出. 三.源代码 1 package com.java.lianxi; 2 3 import java.util.Scanner; 4

结对开发五--最大子数组的和(大数溢出)

一.设计思路 根据上一个实验,再让他自动生成1000个随机long型数.并且自己埋入炸弹,看是否有异常出错. 二.实验代码 1 import java.util.*; 2 class SuperMax3 3 { 4 public static void main(String[] args) 5 { 6 long[] list = new long[1000];//输入数组是必须先定义数组,否则出错! 7 long[] arr1 = new long[1000];//输入数组是必须先定义数组,否

结对开发——一维数组最大子数组判断溢出

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

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

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

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

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

结对开发四--首尾相连得数组的最大子数组的和

一.设计思路 根据上一个结对开发的基础上,将数组的首尾可以连接起来,组成一个首尾相联的数组,也就是说,每一个元素都能当作是数组的第一个元素, 因此,就可以根据有几个元素,就定义几个数组,让每一个元素都能成为元素的第一个元素,来得出每一个数组的最大子数组的和,那么怎么构造 每一个数组呢? 可以用冒泡交换,就是根据冒泡排序的原理,将数组的最后一个元素转移到数组的第一个元素的位置,然后就得到了目标数组,算出最大值. 二.源代码 1 import java.util.*; 2 public class

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

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

结对开发——返回一个整数数组中最大子数组的和

一.题目要求 1.输入一个整型数组,数组里有正数也有负数. 2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 3.求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思想 1.首先随机产生一个数组,该数组里有正数也有负数. 2.从数组中第一个元素a[0]开始,依次计算a[0].a[0]+a[1].a[0]+a[1]+...+a[i]的值,即从a[0]开始的每个子数组的和,取出最大值. 3.再从数组第二个元素a[1]开始,依次往后计算每个子数组的和,取出最大值.依次循

结对开发-返回一个整数数组的最大子数组的和

日期&&任务 听课 编写程序 阅读相关书籍 网上查找资料   日总计 周一 100   10 30 140 周二   120   30 150 周三   30 10 10 50 周四 100 20     120 周五   120    30 150 周六   45 60 10 155 周日           周总计 200 335 80 110 765 时间记录日志 3/21 日期 开始时间 结束时间 中断时间 净时间 活动 备注 3/21 14:00 15:50 10 100 听课

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

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