题目:
返回一个整数数组中最大子数组的和。
要求:
要求程序必须能处理1000 个元素;
每个元素是int32 类型的;
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。
(我主要负责程序分析,代码编程;张金负责代码复审,代码测试计划。)
#include<stdlib.h>
#define AMOUNT 1000
int
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;
}
总结:做起来比较吃力,不过有了一定的体会,日后把心思多放在学习上一些,希望我能较快进入状态。