#include<iostream>
#include<ctime>
using namespace std;
int main()
{
cout<<"数1601-2 20163980 \n黄瑞波"<<endl;;
int m,n=0,star=0,end=0;
cout<<"1.手动输入数组。\n2.随机生成数组。请选择功能:";//选择自己输入或者随机生成
cin>>m;
switch(m)
{
case 1:{
int *p=new int[n];//开辟为n的存储空间
cout<<"请输入数组的长度:";
cin>>n;
if(n<0)
{
cout<<"输入的数组长度有误,请重新输入!"<<endl;//判断数据有效性
return 0;
}
cout<<"输入一个"<<n<<"维整型数组:";
//以下算法代码参考与网络。
for(int i=0;i<n;i++)
{
cin>>p[i];
}
int sum=p[0];
int max_sum=p[0];
for(int i=1;i<n;i++)
{
if(sum>0) //是否为正数
{
sum=sum+p[i]; //是正数,做和。
if(sum>max_sum) // 并判断是否为最大,是让其赋值给max_sum。
{
max_sum=sum;
end=i;
}
}
else
{
sum=p[i]; //是负数,将第i+1个数的值赋值给和值sum
if(sum>max_sum)//并判断是否为最大,是让其赋值给max_sum。
{
max_sum=sum;
star=i;
end=i;
}
}
}
cout<<"最大子数组位置为第"<<star+1<<"个到第"<<end+1<<"个"<<endl;
cout<<"最大子数组和为"<<max_sum<<endl;
};break;
case 2:
{
int *p=new int[n];
cout<<"请输入数组的长度:";
cin>>n;
if(n<0)
{
cout<<"输入的数组长度有误,请重新输入!"<<endl;
return 0;
}cout<<"随机数组为:";
for(int i=0;i<n;i++)
{
p[i]=-rand()%4000+2000;
cout<<p[i]<<" ";
}
cout<<endl;
int sum=p[0];
int max_sum=p[0];
for(int i=1;i<n;i++)
{
if(sum>0) //判断是否为正数
{
sum=sum+p[i]; //是正数,做和。
if(sum>max_sum) // 并判断是否为最大,是让其赋值给max_sum。
{
max_sum=sum;
end=i;
}
}
else
{
sum=p[i]; //是负数,将第i+1个数的值赋值给和值sum
if(sum>max_sum)//并判断是否为最大,是让其赋值给max_sum。
{
max_sum=sum;
star=i;
end=i;
}
}
}
cout<<"最大子数组位置为:第"<<star+1<<"个到第"<<end+1<<"个"<<endl;
cout<<"最大子数组和为:"<<max_sum<<endl;
};break;
}
return 0;
}
原文:https://www.cnblogs.com/huangrb/p/9784124.html