zoukankan      html  css  js  c++  java
  • 一维数组和的溢出问题

    一.题目要求

       返回一个整数数组中最大子数组的和。
     要求程序必须能处理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窗口左上角图标上点左键出来菜单--选属性--选布局页面--把屏幕缓冲区大小的高度改大就行了
  • 相关阅读:
    mysql练习题
    转 -day19--form&modelform
    day20--注册功能及首页
    day19-form表单&auth模块、项目初识
    day15-pymysql模块的使用
    第14天jquery+bootstrap
    第13天-js+jquery
    iTween基础之Punch(摇晃)
    iTween基础之Audio(音量和音调的变化)
    iTween基础之Rotate(旋转角度)
  • 原文地址:https://www.cnblogs.com/chengchengshuaio/p/4387302.html
Copyright © 2011-2022 走看看