• 一维数组最大子数组(二)


    一.题目要求

       返回一个整数数组中最大子数组的和。
     要求程序必须能处理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;
     
    }

     

    思路:
    这是扫描法,从第一个开始记和开始到最后一个数,用maxsun记最大的和,但是有两个问题:1.在这个程序里计算子数组是错误的,比如到第五个数是最大的,但是加上第六个就是负数,那么子数组最开始就是改为第七个数开始;2.每个数都是在rand()%21-10之间,但不是任何一个数,整个的和没有超过int的范围,所以不存在溢出的问题,即没有真正解决溢出的问题。
     
  • 相关阅读:
    错误: error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. 的处理方法
    C语言习题
    嵌入式芯片STM32F407
    c语言课后习题
    求方程式的根
    C语言课后习题
    LINUX常用指令
    在 pythonanywhere 上搭建 django 程序(Virtualenv+python2.7+django1.8)
    Git远程操作详解
    ./configure,make,make install的作用
  • 原文地址:https://www.cnblogs.com/hongyedeboke/p/4399835.html
Copyright © 2020-2023  润新知