首页 > 编程语言 > 详细

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

时间:2015-03-29 23:34:29      阅读:263      评论:0      收藏:0      [点我收藏+]

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

一.题目:

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

二.要求:

  要求程序必须能处理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;
}

 五.运行截图

技术分享

技术分享

附:

技术分享

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

原文:http://www.cnblogs.com/myblog1993/p/4376510.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!