码迷,mamicode.com
首页 > 编程语言 > 详细

一维数组和的溢出问题

时间:2015-04-02 18:05:55      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:

一.题目要求

   返回一个整数数组中最大子数组的和。
 要求程序必须能处理1000 个元素;
   每个元素是int32 类型的;
   输入一个整形数组,数组里有正数也有负数。
 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
 求所有子数组的和的最大值。

二.代码

#include<iostream>
#include<ctime>
#include<stdlib.h>
#define N 100000
using namespace std;
void main()
{
	long long begin;//子序列的开头
	long long end;//子序列的结尾
	long long newsum;//当前子序列最大值
	long long maxsum;//子序列最大值
	srand((unsigned)time(NULL));//生成随机数
	long long a[N], i, n;
	/*begin = 0;
	end = 0;*/
	newsum = 0;//初始化
	maxsum = a[0];//初始化
	cout << "请输入数组里面包含数的个数:" << endl;
	cin >> n;
	for (i = 0; i < n; i++)
	{
		a[i] = rand() % 21 - 10;
	}
	cout << "数组a[" << n << "]为:";
	for (i = 0; i < n; i++)
	{
		cout << a[i] << " ";
	}
	cout << endl;

	for (i = 0; i<n; i++)//开始循环求子序列和
	{
		newsum = newsum + a[i];
		if (newsum > maxsum)//更新当前子序列的和
		{
			maxsum = newsum;
			end = i;
		}
		if (newsum < 0)//假若当前子序列和为负,则舍弃
		{
			begin = i + 1;
			newsum = 0;

		}
	}

	cout << "最大的子序列和为:" << maxsum << endl;
	cout << "最大的序列为:";
	for (long long k = begin; k <= end; k++)
	{
		cout << a[k] << " ";
	}
	cout << endl;

}

  技术分享

 控制台窗口一次输出的最大行数是 299行.超过这个数目的话前面超出的会被忽视.

 这是因为缓存不够,
 开始-- 运行---输入cmd回车===>在出来的cmd窗口左上角图标上点左键出来菜单--选属性--选布局页面--把屏幕缓冲区大小的高度改大就行了技术分享技术分享技术分享

一维数组和的溢出问题

标签:

原文地址:http://www.cnblogs.com/chengchengshuaio/p/4387302.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!