c语言实现返回最大子数组,返回一个整数数组中最大子数组的和 C语言

1、题目:返回一个整数数组中最大子数组的和。

2、要求:

要求程序必须能处理1000 个元素;

每个元素是int32 类型的;

输入一个整形数组,数组里有正数也有负数。

数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

求所有子数组的和的最大值。要求时间复杂度为O(n)。

3、设计思路:

将数组大小定义为1000,对于每个元素定义为int32类型,将求和函数设置为int 类型,这样可以方便观测数据的溢出,让数组元素可以超出范围。

4.程序代码:

#include

#include

#include

#define N 1000

using namespace std;

void RandIn(int IntNum,int A[])   //随机生成数组

{

cout<

for(int i=0;i

{

A[i]=rand()-rand();

cout<

if(i%15==4)

cout<

else

cout<

}

}

void SelMax(int IntNum,int A[],auto &sum)

{

int buffer=0;

int count1=0;        //求和的数值个数

int count2=0;    //进行的运算次数

for(int j=0;j<=IntNum;j++)

{

if(j==IntNum)

{

j=0;

}

buffer+=A[j];

count1++;

count2++;

if(buffer<0)

{

buffer=0;

count1=0;

}

if(sum

{

sum=buffer;

}

{

break;

}

}

}

void main()

{

int IntNum;

int A[N];

int q=0;

while(q==0)

{

auto sum=0;

srand((unsigned)time(NULL));

cout<

cin>>IntNum;

RandIn(IntNum,A);

SelMax(IntNum,A,sum);

cout<

cout<

cout<

cin>>q;

system("cls");

}

}

5.运行结果

无溢出时:

b5be255370b0c5ffcd3a212d6d37a981.png

溢出时:对代码进行改动,在求和代码函数中*4294967296(也就是2的32次方)   这样在运行程序之后就会溢出,截图如下:

b37930096969362920b29b8e191b5f1d.png

6.实验感想:这次实验让我明白了实验代码简练的重要性,算法优化的重要性,这样可以节省运算时间,所以这次试验我收获很多,下次

实验我会更加用心,学习到更多知识,让我更上一层楼。

7.小组相片:

ce9baeb7de650f7ec41eb28d59925477.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值