返回一个整数数组中最大子数组的和。
一、程序要求
1.必须能处理1000个元素;
2.每个元素是int32类型的,出现子数组之和大于整型的最大范围会出现什么情况;
3.输入一个整型数组,数组里面有正数也有负数;
4.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和;
5.求所有子数组的和最大值。要求时间复杂度为O(n)。
二、编程思路
要求能处理1000个元素,就可随机生成IntNum个正负数,使IntNum 大于1000,引入一个常量记录累加的和buffer,用cont1计算vuffer进行求和的数值个数,cont2计算for语句进行的运算次数,如果累加和小于0,buffer重新初始化为0,sum始终记录下存在的最大和,计算子数组的和的最大值。
编程代码
#include<iostream>
#include<time.h>
#include<conio.h>
#define N 100000
using namespace std;
void RandIn(int IntNum,int A[])
{
cout<<"整数内容"<<endl;
for(int i=0;i<IntNum;i++)
{
A[i]=rand()-rand();
cout<<A[i];
if(i%5==4)
cout<<endl;
else
cout<<'\t';
}
}
void SelMax(int IntNum,int A[],auto &sum)
{
auto 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<buffer)
{
sum=buffer;
}
if(count1>IntNum||count2>IntNum*2)
{
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<<endl;
cout<<sum<<endl;
cout<<"是否继续测试(输入0则继续否则停止)";
cin>>q;
system("cls");
}
}
三、运行截图
要求能处理1000个元素,就可随机生成IntNum个正负数,使IntNum 大于1000,引入一个常量记录累加的和buffer,用cont1计算vuffer进行求和的数值个数,cont2计算for语句进行的运算次数,如果累加和小于0,buffer重新初始化为0,sum始终记录下存在的最大和,计算子数组的和的最大值。
编程代码
#include<iostream>
#include<time.h>
#include<conio.h>
#define N 100000
using namespace std;
void RandIn(int IntNum,int A[])
{
cout<<"整数内容"<<endl;
for(int i=0;i<IntNum;i++)
{
A[i]=rand()-rand();
cout<<A[i];
if(i%5==4)
cout<<endl;
else
cout<<'\t';
}
}
void SelMax(int IntNum,int A[],auto &sum)
{
auto 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<buffer)
{
sum=buffer;
}
if(count1>IntNum||count2>IntNum*2)
{
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<<endl;
cout<<sum<<endl;
cout<<"是否继续测试(输入0则继续否则停止)";
cin>>q;
system("cls");
}
}
三、运行截图


四、实验心得
本次对数组程序的编码,加深了我对数组的认识,调用了函数,掌握的随机rang的使用方法,同时通过和伙伴的合作,认识到了合作在开发中的重要性,为以后的编程开发提供了宝贵的经验,给我们很大帮助。
五、结对照片

浙公网安备 33010602011771号