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

本文介绍了一个使用C++实现的算法,该算法生成一个包含随机正负数的数组,并找出其中的最大子数组和。通过rand()函数产生随机数,并使用循环和条件判断来计算最大子数组和,同时进行了int32溢出测试。
#include<iostream>
#include<stdlib.h>
#include<iomanip>
#include<time.h>
#define Max  10000
using namespace std;
void main ()
{   
    int n,array[Max];   
    cout<<"请输入数组的长度:";   
    cin>>n;   //输入处理的元素个数
    cout<<"产生的n个数为"<<endl;   
    for(int i=0;i<n;)   
        {               
            array[i]=-Max/10+rand()%(Max*2+1);   
            cout<<setw(10)<<array[i]<<" ";
            i++;    
            if(i%10==0)     
                cout<<endl;   
       }   //通过rand随机产生正负数元素
       cout<<endl; 

       int sum=array[0],max=array[0];   
       for(int i=0;i<n;i++)   
       {       
            sum=sum+array[i]; //累加元素求出数组和  
            if(sum<array[i])     
                sum=array[i];  
            if (max<sum)     
                max=sum;  //求出最大数组和   
       }   
     cout<<"最大的子数组和是:"<<max<<endl;
     //测试超出int32范围
     for(int i=0;i<n;i++)   
       {    
            if(array[i]<=0)
                sum=sum-array[i];
            else
                sum=sum+array[i];
       }   
    cout<<"int32溢出测试值:"<<sum<<endl;
}

测试结果:

 

总结:翻阅c++有关书籍,获得的一定的帮助;

我们在编译过程中,对于一些问题产生分歧,并进行了讨论交流;

测试溢出int32,总是无法达到预期结果。

结对同学:博客园ID:绝望的暴风雨(*涛)

学习照片:

转载于:https://www.cnblogs.com/yh99/p/9786345.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值