一、实验思路
按要求随机产生几个数,然后先求数组的最大子数组的最大值,然后再比较他们的最大值求出整个子数组的最大子数组和
付东:程序编码和思路讨论 岳竞一:思路讨论,代码编程后的测试和审核
二、实验代码
#include<iostream.h>
#include<stdlib.h>
int Maxsum(int *a,int n)//一维数组的求最大
{
int tempstart =0,sum=0,max=-1000;
int i;
int start,end;
start=end=0;
for(i=0;i<n;i++)
{
if(sum<0)
{
sum=a[i];
tempstart=i;
}
else
{
sum+=a[i];
}
if(sum>max)
{
max=sum;
start=tempstart;
end=i;
}
} //
cout<<"start="<<start<<endl<<"end="<<i<<endl;
return max;
}
int main()
{
int b[10000];
int max[10000];
int num,i;
cout<<"输入数组成员个数:";
cin>>num;
for(i=0;i<num;i++)
{
b[i]=(rand()%1000)-500;
}
cout<<"输出数组:"<<endl;
for(i=0;i<num;i++)
{
cout<<b[i]<<"\t";
}
cout<<endl;
for(i=0;i<(num-1);i++) //将环状数组转换为一维数组
{
b[num+i]=b[i];
}
int d[1000],st,en;
for(i=0;i<num;i++) //将一维数组转换为n个最大子数组
{
for(int j=0;j<num;j++)
{
d[j]=b[i+j];
max[i]=Maxsum(d,num);
}
}
int maxm=max[0];//比较n个最大子数组的最大子数组的最大值
for(i=0;i<num;i++)
{
if( maxm>max[i])
{
maxm=max[i];
}
}
cout<<"最大子数组和为:"<<maxm<<endl;
return 0;
}
三、实验结果截图
四、实验心得
在本次实验中,我们拓宽了思路,发现解决问题的办法有很多,要选用自己会的熟悉的方法来解决,当然在课堂和平时练习中应该多练练生疏的知识。
五、我的基友