题目:
返回一个整数数组中最大子数组的和。
要求:
要求程序必须能处理1000 个元素;
每个元素是int32 类型的;
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。
(我主要负责程序分析,代码编程;张金负责代码复审,代码测试计划。)
#include<stdlib.h>#define AMOUNT 1000int main()
{ long int arr[AMOUNT];
long int arrCopy[AMOUNT];
long int max[AMOUNT];
int i,j;
int n;
int start,rear; //子数组的开始,结束
int mount=AMOUNT;
for(i=0;i<mount;i++)
{
try
{
n=rand()%2;
if(n==0)
{
arr[i]=rand();
arrCopy[i]=arr[i];
max[i]=arr[i];
}
else
{
arr[i]=-rand();
arrCopy[i]=arr[i];
max[i]=arr[i];
}
}
catch(long int e)
{
cout<<"Long Inter=ger Exception!"<<endl;
}
}
cout<<"Array :"<<endl;
for(i=0;i<mount;i++)
{
cout<<arr[i]<<" ";
if((i+1)%10==0)
{
cout<<endl;
}
}
for(j=0;j<mount-1;j++)
{
for(i=j+1;i<mount;i++)
{
try
{
arr[j]=arr[j]+arr[i];
if(max[j]<arr[j])
{
max[j]=arr[j];
rear=i+1;
}
}
catch(long int e)
{
cout<<"Long Inter=ger Exception!"<<endl;
}
}
}
for(i=0;i<mount;i++)
{
if(max[0]<max[i])
{
max[0]=max[i];
start=i+1;
}
}
cout<<endl;
cout<<"从第"<<start<<"个数"<<arrCopy[start-1]<<"开始"<<endl;
cout<<"到第"<<rear<<"个数"<<arrCopy[rear-1]<<"结束"<<endl;
cout<<"子数组和的最大值为: "<<max[0]<<endl;
return 0;
} 总结:做起来比较吃力,不过有了一定的体会,日后把心思多放在学习上一些,希望我能较快进入状态。